강의

멘토링

로드맵

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

pyj789123님의 프로필 이미지
pyj789123

작성한 질문수

[멀테쓰레드 프로그래밍-SpinLock]

작성

·

136

0

CAS 의사코드 중

if와 else 문 두 군데에 아래 코드가 있는데,

 

expected = _locked

 

expected는 항상 false로 설장하는데, 해당 코드가 있어야 하는 이유가 뭔가요?!

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.
pyj789123님, 질문 주신 멀티 쓰레드 프로그래밍의 SpinLock 관련하여 Compare-And-Swap(CAS) 작동 원리에 대해 설명 도와드리겠습니다.

CAS 연산은 변수의 값을 예상값(expected)이라고 생각하는 값과 실제 변수의 현재 값(actual)이 일치할 경우에만 새로운 값으로 업데이트하는 원자적 연산입니다. 여기서 사용되는 expected는 일반적으로 해당 변수가 가질 수 있는 초기 값이나 특정 상태를 나타내기 위한 기준 값입니다.

예를 들어, SpinLock 구현에서 _locked 변수가 lock의 상태를 나타내며, false는 lock이 해제되었음을, true는 lock이 잠겨 있음을 나타냅니다. CAS를 사용하여 lock을 얻으려고 할 때, expected 값을 false로 설정하고 _locked 값을 true로 바꾸려고 시도합니다. 이때 expected_locked 변수의 현재 값과 같다면, 아직 아무도 lock을 얻지 못한 상태이고, CAS 연산이 성공하여 현재 쓰레드가 lock을 얻게 됩니다.

여기서 _locked 변수의 값을 expected로 다시 할당하는 코드는, 재시도를 위한 준비 과정에서 사용될 수 있습니다. CAS 연산이 실패하면(즉, 다른 쓰레드가 lock을 이미 얻었을 때), expected 값을 초기화하여 다시 조건을 검사하고, 이것이 반복되어 결국 lock이 해제되어 expected_locked의 값이 일치할 때까지 계속해서 잠금을 시도하는 것입니다.

따라서 _locked 값을 expected로 다시 할당하는 코드는 SpinLock의 동작 방식에서 반복적인 잠금 시도를 위한 필수적인 부분입니다.

혹시 이 설명이 pyj789123님의 질문에 만족스러운 답변이 되었는지요? 추가적인 질문이나 다른 내용으로 도움이 필요하시다면 언제든지 문의해 주세요.

pyj789123님의 프로필 이미지
pyj789123

작성한 질문수

질문하기