멀티코어와 동기화

여러 락을 사용하는 프로그램에서 데드락을 방지하는 가장 일반적인 방법은?

  1. A모든 스레드가 락을 잡는 순서를 프로그램 전체에서 동일하게 정해 둔다
  2. B락을 잡으면 절대 해제하지 않도록 한다
  3. C스레드 수를 2개 이하로 한다
정답과 해설 보기

정답: A. 모든 스레드가 락을 잡는 순서를 프로그램 전체에서 동일하게 정해 둔다

데드락은 스레드들이 서로 상대가 가진 락을 기다리는 「순환」이 생기면 일어납니다. 예를 들어 「반드시 A를 잡은 다음 B를 잡는다」를 모두가 지키면, B를 가진 채 A를 기다리는 스레드가 나타나지 않아 순환이 생기지 않습니다. 그 밖에도 한 번에 필요한 락을 한꺼번에 잡는 방법, 잡지 못하면 가지고 있는 락을 놓고 재시도하는 방법 등이 있습니다.

  • A. 맞습니다. 대기의 순환이 생기지 않게 됩니다.
  • B. 해제하지 않으면 다른 스레드가 영원히 기다립니다.
  • C. 두 스레드에서도 데드락은 일어납니다.
이 분야 연습하기 분야로 돌아가기

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

  1. 메모리 일관성 모델(memory consistency model)이 규정하는 것은?
  2. 순차 일관성(sequential consistency)에 대한 설명으로 올바른 것은?
  3. 위의 두 스레드를 서로 다른 코어에서 동시에 실행한다(컴파일러에 의한 재배치는 없다고 가정). 순차 일관성에서는 일어나지 않지만 x86 등의 실제 CPU에서는 일어날 수 있는 결과는?
  4. x86의 메모리 일관성 모델(TSO, Total Store Order)의 특징으로 올바른 것은?
  5. ARM이나 RISC-V(RVWMO)와 같은 약한 메모리 일관성 모델에 대해 올바른 것은?

이 분야의 비교