강의

멘토링

로드맵

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

KeepCoding님의 프로필 이미지
KeepCoding

작성한 질문수

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

Condition Variable

질문 드립니다.

작성

·

253

0

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

퀴즈

66%나 틀려요. 한번 도전해보세요!

멀티쓰레딩 환경에서 여러 쓰레드가 동시에 공유 데이터에 접근하여 값을 수정할 때 발생할 수 있는 예상치 못한 결과의 주요 원인은 무엇일까요?

데드락

쓰레드 지역 저장소(TLS) 충돌

경쟁 상태(Race Condition)

CPU 파이프라인 실패

답변 1

1

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

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

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

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

답변 감사합니다.

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

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

KeepCoding님의 프로필 이미지
KeepCoding

작성한 질문수

질문하기