멀티코어와 동기화

CAS를 사용한 락프리 자료구조에서 문제가 되는 ABA 문제에 대한 설명으로 올바른 것은?

  1. AA와 B 두 스레드가 번갈아서만 실행될 수 있게 된다
  2. B값이 A에서 B로 바뀌었다가 다시 A로 돌아오면, CAS가 변화를 알아차리지 못하고 성공해 버린다
  3. CA와 B 두 락을 반대 순서로 잡아 버린다
정답과 해설 보기

정답: B. 값이 A에서 B로 바뀌었다가 다시 A로 돌아오면, CAS가 변화를 알아차리지 못하고 성공해 버린다

연결 리스트의 헤드 포인터가 A일 때, 한 스레드가 A를 읽고 CAS를 준비하는 사이에 다른 스레드가 A를 제거하고 B에 대한 조작을 한 뒤, 다시 같은 주소 A의 노드를 넣는 일이 있습니다. CAS는 값이 A 그대로이므로 성공하지만, 리스트의 내용은 이미 바뀌어 있어 구조가 깨집니다. 포인터에 갱신 횟수를 붙여 함께 비교하는 방법이나 LR/SC를 사용하는 방법으로 방지합니다.

  • A. 실행 순서의 문제가 아닙니다.
  • B. 맞습니다. 값만 비교하는 CAS의 약점입니다.
  • C. 그것은 데드락의 원인입니다.
이 분야 연습하기 분야로 돌아가기

멀티코어와 동기화의 다른 문제

  1. RISC-V의 amoadd.w 명령이나 x86의 lock xadd 명령과 같은 fetch-and-add 명령의 동작으로 올바른 것은?
  2. 스핀락(spinlock)에 대한 설명으로 올바른 것은?
  3. 스핀락이 적합하지 않은 상황으로 가장 적절한 것은?
  4. 스핀락에서 락 변수를 곧바로 아토믹 명령으로 갱신하려 하지 않고, 평소에는 일반 읽기로 풀리기를 기다리다가 풀린 것으로 보일 때만 아토믹 명령을 사용하는 방식(test-and-test-and-set)의 이유로 올바른 것은?
  5. 뮤텍스(잠들어서 기다리는 락)와 스핀락을 비교한 설명으로 올바른 것은?

이 분야의 비교