멀티코어와 동기화

스핀락에서 락 변수를 곧바로 아토믹 명령으로 갱신하려 하지 않고, 평소에는 일반 읽기로 풀리기를 기다리다가 풀린 것으로 보일 때만 아토믹 명령을 사용하는 방식(test-and-test-and-set)의 이유로 올바른 것은?

  1. A일반 읽기가 아토믹 명령보다 정확하기 때문
  2. B아토믹 명령은 하나의 프로그램에서 한 번밖에 사용할 수 없기 때문
  3. C읽기만 한다면 자신의 캐시 안에서 기다릴 수 있어, 캐시 라인이 코어 사이를 오가는 통신을 크게 줄일 수 있기 때문
정답과 해설 보기

정답: C. 읽기만 한다면 자신의 캐시 안에서 기다릴 수 있어, 캐시 라인이 코어 사이를 오가는 통신을 크게 줄일 수 있기 때문

아토믹 명령은 쓰기를 동반하므로, 기다리는 스레드가 반복해서 실행하면 그때마다 라인을 M 상태로 서로 빼앗으며 다른 코어의 복사본을 계속 무효화합니다. 일반 읽기라면 각 코어는 S 상태의 복사본을 자신의 캐시에서 계속 읽기만 하므로 통신이 일어나지 않습니다. 락이 해제되어 값이 바뀌었을 때만 아토믹 명령으로 잡으러 갑니다.

  • A. 정확성의 차이가 아닙니다.
  • B. 그런 제한은 없습니다.
  • C. 맞습니다. 쓸 때마다 라인을 서로 빼앗지 않아도 됩니다.
이 분야 연습하기 분야로 돌아가기

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

  1. 뮤텍스(잠들어서 기다리는 락)와 스핀락을 비교한 설명으로 올바른 것은?
  2. 데드락(deadlock)의 예로 올바른 것은?
  3. 여러 락을 사용하는 프로그램에서 데드락을 방지하는 가장 일반적인 방법은?
  4. 메모리 일관성 모델(memory consistency model)이 규정하는 것은?
  5. 순차 일관성(sequential consistency)에 대한 설명으로 올바른 것은?

이 분야의 비교