인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

KeepCoding님의 프로필 이미지
KeepCoding

작성한 질문수

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

Condition Variable

질문 드립니다.

작성

·

225

0

spinlock 수업에서 설명해주신 내용처럼 이번 강의 예제의 경우에도 두개의 쓰레드가 서로 동시에 락을 걸어서 데드락상황이 발생할 수 있는건가요? 그래서 실제 사용시에는 CAS처리를 해줘야 하는건지 문의드립니다.

답변 1

1

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

경합이랑 데드락, 스핀락을 헷갈리시면 안 됩니다.
현 상황에서 경합은 이뤄질 수 있지만, 그렇다고 데드락이 일어나는 것은 아닙니다.
(unique_lock이라는 락가드로 락이 필요없으면 풀어주고 있죠)

스핀락은 락을 획득하지 못했을 때,
다시 시도를 하는 방법을 의미하지만
그것은 상호배타적 특성을 구현하는 하나의 방법이고
이미 std::mutex에서 그런 상호배타적 특성을 구현하고 있기에
CAS를 별도로 처리해줄 필요는 없습니다.

KeepCoding님의 프로필 이미지
KeepCoding
질문자

답변 감사합니다.

스핀락 강의에서 spinlock강의에선 mutex를 사용하지 않은 경우였군요.

spinlock클래스를 구현하여 락가드에 넣어주는건  유저레벨에서 제어하기 위함인가요?

KeepCoding님의 프로필 이미지
KeepCoding

작성한 질문수

질문하기