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

TH B님의 프로필 이미지
TH B

작성한 질문수

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

Lock-Free Stack #3

Lock-Free Stack #3에서 질문이 있습니다.

작성

·

351

0

IncreaseHeadCount 부분에서

CountedNodePtr newCounter = _oldCounter 를 해주는데

newCounter 같은 경우 지역변수이기 때문에 애초에 경합이 발생할 수 없지 않나요? int 변수를 공유하는 것도 아니고 완전히 새로운 지역 변수이기 때문에 좀 이해가 안됩니다.

 

오히려 oldCounter를 바꿔주기 위해서 head.compare_exchange_strong을 하는거 아닌가요?

답변 1

0

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

네 그게 맞는데요.

(1) CountedNodePtr newCounter = _oldCounter
(2) CAS

이런 코드는 동시다발적으로 발생해서 1-2 사이에 다른 쓰레드가 새치기 하면
얼마든지 결과가 취소되어야 합니다.
조금 정신없고 이해하기 어려우니, 찬찬히 고민을 해보시기 바랍니다!

TH B님의 프로필 이미지
TH B

작성한 질문수

질문하기