작성
·
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님의 질문에 만족스러운 답변이 되었는지요? 추가적인 질문이나 다른 내용으로 도움이 필요하시다면 언제든지 문의해 주세요.