멀티코어와 동기화

스핀락이 적합하지 않은 상황으로 가장 적절한 것은?

  1. A락을 잡고 있는 시간이 길어, 기다리는 스레드가 CPU를 헛되이 계속 사용하게 되는 상황
  2. B락을 잡고 있는 시간이 수십 나노초로 매우 짧은 상황
  3. COS 커널 안에서 잠들 수 없는 처리 상황
정답과 해설 보기

정답: A. 락을 잡고 있는 시간이 길어, 기다리는 스레드가 CPU를 헛되이 계속 사용하게 되는 상황

스핀락으로 기다리는 스레드는 락이 풀릴 때까지 CPU를 계속 사용합니다. 락을 잡고 있는 시간이 길면 그 CPU 시간이 모두 낭비되고, 다른 스레드의 실행도 방해합니다. 특히 코어가 하나뿐이면 락을 잡고 있는 스레드가 실행되지 않는 한 풀리지 않으므로, 대기는 타임 슬라이스가 끝날 때까지 이어집니다. 긴 대기에는 잠들어서 기다리는 뮤텍스를 사용하며, 짧은 시간만 돌다가 잠드는 방식도 있습니다.

  • A. 맞습니다. 그 경우에는 잠들어서 기다리는 락이 더 효율적입니다.
  • B. 짧은 경우야말로 스핀락이 적합합니다.
  • C. 잠들 수 없는 상황에서는 스핀락이 사용됩니다.
이 분야 연습하기 분야로 돌아가기

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

  1. 스핀락에서 락 변수를 곧바로 아토믹 명령으로 갱신하려 하지 않고, 평소에는 일반 읽기로 풀리기를 기다리다가 풀린 것으로 보일 때만 아토믹 명령을 사용하는 방식(test-and-test-and-set)의 이유로 올바른 것은?
  2. 뮤텍스(잠들어서 기다리는 락)와 스핀락을 비교한 설명으로 올바른 것은?
  3. 데드락(deadlock)의 예로 올바른 것은?
  4. 여러 락을 사용하는 프로그램에서 데드락을 방지하는 가장 일반적인 방법은?
  5. 메모리 일관성 모델(memory consistency model)이 규정하는 것은?

이 분야의 비교