인프런 커뮤니티 질문&답변
질문 드립니다.
작성
·
253
0
spinlock 수업에서 설명해주신 내용처럼 이번 강의 예제의 경우에도 두개의 쓰레드가 서로 동시에 락을 걸어서 데드락상황이 발생할 수 있는건가요? 그래서 실제 사용시에는 CAS처리를 해줘야 하는건지 문의드립니다.
퀴즈
66%나 틀려요. 한번 도전해보세요!
멀티쓰레딩 환경에서 여러 쓰레드가 동시에 공유 데이터에 접근하여 값을 수정할 때 발생할 수 있는 예상치 못한 결과의 주요 원인은 무엇일까요?
데드락
쓰레드 지역 저장소(TLS) 충돌
경쟁 상태(Race Condition)
CPU 파이프라인 실패
답변 1
1
Rookiss
지식공유자
경합이랑 데드락, 스핀락을 헷갈리시면 안 됩니다.
현 상황에서 경합은 이뤄질 수 있지만, 그렇다고 데드락이 일어나는 것은 아닙니다.
(unique_lock이라는 락가드로 락이 필요없으면 풀어주고 있죠)
스핀락은 락을 획득하지 못했을 때,
다시 시도를 하는 방법을 의미하지만
그것은 상호배타적 특성을 구현하는 하나의 방법이고
이미 std::mutex에서 그런 상호배타적 특성을 구현하고 있기에
CAS를 별도로 처리해줄 필요는 없습니다.






답변 감사합니다.
스핀락 강의에서 spinlock강의에선 mutex를 사용하지 않은 경우였군요.
spinlock클래스를 구현하여 락가드에 넣어주는건 유저레벨에서 제어하기 위함인가요?