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

장인석님의 프로필 이미지
장인석

작성한 질문수

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

SpinLock

compare_exchange_strong과 compare_exchange_weak

해결된 질문

작성

·

853

0

compare_exchange에 해당하는 두가지 함수가 있기에 궁금하여 해당 내용을 찾아보았지만 이해가 가지 않습니다.
https://cplusplus.com/reference/atomic/atomic/compare_exchange_strong/

Unlike compare_exchange_weak, this strong version is required to always return true when expected indeed compares equal to the contained object, not allowing spurious failures. However, on certain machines, and for certain algorithms that check this in a loop, compare_exchange_weak may lead to significantly better performance.

1) spurious failures? weak는 해당 오류가 어떻게 나올 수 있다는 걸까요?
2) weak와 strong을 선택하는 대표적인 기준은 무엇인가요?

 

답변 1

2

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

1)
spurious wake(가짜 실패?)라고 연산을 완료하지 않았는데
함수가 리턴되는 경우가 종종 있다고
아주 전설의 유니콘처럼만 전해져오지만,
제가 실험했을 땐 그런 케이스를 본 적이 없습니다.
정말 0.0000000001%의 확률이라고 있다고 가정하면
while 문에서 CAS를 돌리는 식으로 코드를 작성하면 됩니다.

[다음은 C++ Concurrency In Action 에서 나온 내용입니다]


2)
임베디드 같은 극한의 환경까지 가지 않는 이상,
일반 서버 관점에서는 둘의 성능 차이가 아주 미미해
그냥 strong으로 사용하면 됩니다.

장인석님의 프로필 이미지
장인석

작성한 질문수

질문하기