멀티코어와 동기화
스핀락에서 락 변수를 곧바로 아토믹 명령으로 갱신하려 하지 않고, 평소에는 일반 읽기로 풀리기를 기다리다가 풀린 것으로 보일 때만 아토믹 명령을 사용하는 방식(test-and-test-and-set)의 이유로 올바른 것은?
- A일반 읽기가 아토믹 명령보다 정확하기 때문
- B아토믹 명령은 하나의 프로그램에서 한 번밖에 사용할 수 없기 때문
- C읽기만 한다면 자신의 캐시 안에서 기다릴 수 있어, 캐시 라인이 코어 사이를 오가는 통신을 크게 줄일 수 있기 때문
정답과 해설 보기
정답: C. 읽기만 한다면 자신의 캐시 안에서 기다릴 수 있어, 캐시 라인이 코어 사이를 오가는 통신을 크게 줄일 수 있기 때문
아토믹 명령은 쓰기를 동반하므로, 기다리는 스레드가 반복해서 실행하면 그때마다 라인을 M 상태로 서로 빼앗으며 다른 코어의 복사본을 계속 무효화합니다. 일반 읽기라면 각 코어는 S 상태의 복사본을 자신의 캐시에서 계속 읽기만 하므로 통신이 일어나지 않습니다. 락이 해제되어 값이 바뀌었을 때만 아토믹 명령으로 잡으러 갑니다.
- A. 정확성의 차이가 아닙니다.
- B. 그런 제한은 없습니다.
- C. 맞습니다. 쓸 때마다 라인을 서로 빼앗지 않아도 됩니다.