멀티코어와 동기화
아토믹 명령 CAS(compare-and-swap)의 동작으로 올바른 것은?
- A메모리의 값이 기대한 값과 같을 때만 새 값을 쓰고, 성공했는지 알 수 있다
- B두 메모리의 값을 비교하여 큰 쪽을 양쪽에 쓴다
- C메모리의 값과 레지스터의 값을 조건 없이 교환한다
정답과 해설 보기
정답: A. 메모리의 값이 기대한 값과 같을 때만 새 값을 쓰고, 성공했는지 알 수 있다
CAS는 「이 주소의 값이 아직 기대값 그대로라면 새 값으로 바꾼다」를 불가분으로 수행합니다. 읽고 나서 쓰기까지의 사이에 다른 스레드가 값을 바꾸었다면 실패하므로, 바뀌지 않았음을 확인하면서 갱신할 수 있습니다. 실패하면 다시 읽어서 계산하고 CAS를 재시도하는 루프로 만들면, 락 없이 공유 값을 안전하게 갱신할 수 있습니다. x86의 cmpxchg 명령 등이 여기에 해당합니다.
- A. 맞습니다. 비교하여 같으면 교체합니다.
- B. 큰 쪽을 쓰는 명령이 아닙니다.
- C. 조건 없는 교환은 스왑(swap) 명령입니다.