인프런 커뮤니티 질문&답변

전지용님의 프로필 이미지
전지용

작성한 질문수

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

SpinLock

스핀락 질문

작성

·

413

0

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

while(_locked)

{

}

_locked=true;

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

스핀락.png

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

답변 1

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

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


전지용님의 프로필 이미지
전지용
질문자

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

 

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

imageimageimage

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

Rookiss님의 프로필 이미지
Rookiss
지식공유자

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

전지용님의 프로필 이미지
전지용

작성한 질문수

질문하기