멀티코어와 동기화
CAS를 사용한 락프리 자료구조에서 문제가 되는 ABA 문제에 대한 설명으로 올바른 것은?
- AA와 B 두 스레드가 번갈아서만 실행될 수 있게 된다
- B값이 A에서 B로 바뀌었다가 다시 A로 돌아오면, CAS가 변화를 알아차리지 못하고 성공해 버린다
- CA와 B 두 락을 반대 순서로 잡아 버린다
정답과 해설 보기
정답: B. 값이 A에서 B로 바뀌었다가 다시 A로 돌아오면, CAS가 변화를 알아차리지 못하고 성공해 버린다
연결 리스트의 헤드 포인터가 A일 때, 한 스레드가 A를 읽고 CAS를 준비하는 사이에 다른 스레드가 A를 제거하고 B에 대한 조작을 한 뒤, 다시 같은 주소 A의 노드를 넣는 일이 있습니다. CAS는 값이 A 그대로이므로 성공하지만, 리스트의 내용은 이미 바뀌어 있어 구조가 깨집니다. 포인터에 갱신 횟수를 붙여 함께 비교하는 방법이나 LR/SC를 사용하는 방법으로 방지합니다.
- A. 실행 순서의 문제가 아닙니다.
- B. 맞습니다. 값만 비교하는 CAS의 약점입니다.
- C. 그것은 데드락의 원인입니다.