inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

SpinLock

스핀락 질문

487

전지용

작성한 질문수 1

0

CAS 의사코드를 설명하시면서

while(_locked)

{

}

_locked=true;

이 코드를 한번에 실행할 수 있다고 하셨는데 두 스레드가 동시에 if문에 진입한다면 동일한 결과를 가지지 않을까라는 생각에서 의사코드 자체를 SpinLock 클래스 안에 새로운 매서드로 만들어서 실행해보니 0이 출력되지 않았습니다.

스핀락.png

어떤 원리로 두 코드가 한번에 실행되는지와 cp매서드를 어떻게 수정해서 compare_exchange_strong처럼 동작하게 할 수 있는 지 궁금합니다.

network MMORPG windows-server

답변 1

0

Rookiss

의사 코드는 말 그대로 이해를 돕기 위한 코드이고
해당 코드를 우리가 유저 레벨에서 구현하면 당연히 작동하지 않습니다.
CPU에 그렇게 동작하는 특수 명령어가 있는 것이라
'원리'를 이해하기 보단 그냥 납득하고 넘어가셔야 하는 부분입니다.
(어차피 캐시 등 여러가지가 엮여 있으니 인텔 등 칩 제조사들이 신경 쓸 부분이겠죠)


0

전지용

빠르게 답변해주셔서 감사드립니다.

 

다른 문제인데 아래 에러는 어떻게 해결해야할까요? 단순한 코드인데 64비트 디버그 시에만 문제가 발생하네요

imageimageimage

혹시나 해서 환경설정 소스코드를 다운받아서 쓰레드를 만들어도 동일한 오류가 발생하는데 이러면 c++설치가 잘못된걸까요?

0

Rookiss

VS를 지우고 다시 설치해보시기 바랍니다.
저도 처음 보는 에러네요

writeLock을 잡을때 꼭 empty 상태여야하는 이유?

0

66

2

Memory Pool에서 오버플로우 질문입니다.

0

97

2

포토폴리오 및 진로 관련하여 고민입니다.

0

180

1

포토폴리오 관련 고민입니다.

0

97

1

실무에서도 alloc, 스마트포인터 등을 구현해서 쓰는지 궁금합니다.

0

109

2

성능 테스트 결과

0

118

2

게임 서버 Stateful, Stateless 진로 고민

0

151

1

WaitOnAddress와 Sleep의 차이 질문

0

105

1

궁금한거 있습니다.

0

93

2

JobTimer 구동 스레드

0

119

2

TryPop() 동작 관련 질문

0

87

1

로드맵 C#서버 C++서버 방향성 질문

0

167

2

스레드 id를 출력할떄 메인스레드 id도 출력되나요?

0

83

1

생명주기를 위한 의도적 복사

0

97

2

락프리의 실무에서 사용 질문

0

157

2

32bit threadID와 16비트 상위 WriteFlag에 대해

0

110

2

mutex와 sleep 차이점

0

133

1

실무에서는 어떠한 코드 스타일을 사용하는지 궁금합니다

0

168

2

Stomp Allocator의 Release함수에 대한 질문입니다.

0

102

1

공부법 관련해서

0

190

2

MakeShared 함수 관련

0

119

1

지금까지 서버코어에서 만든 내용에 대해 궁금한 점이 있어서 질문 드립니다.

0

153

2

운영체제관련 질문입니다

0

147

1

send하려는 데이터 크기가 크면 memcpy에서 문제가 발생할 것 같습니다.

0

125

2