멀티코어와 동기화

데드락(deadlock)의 예로 올바른 것은?

  1. A스레드 1이 락 A를 가진 채 락 B를 기다리고, 스레드 2가 락 B를 가진 채 락 A를 기다리고 있다
  2. B두 스레드가 같은 변수를 동기화 없이 갱신하여 값이 깨진다
  3. C하나의 스레드가 락을 잡고 곧바로 해제한다
정답과 해설 보기

정답: A. 스레드 1이 락 A를 가진 채 락 B를 기다리고, 스레드 2가 락 B를 가진 채 락 A를 기다리고 있다

데드락은 여러 스레드가 각자 자원을 가진 채 다른 스레드가 가진 자원을 서로 기다려서, 아무도 앞으로 나아가지 못하게 되는 상태입니다. 예에서는 스레드 1은 B가 풀리기를, 스레드 2는 A가 풀리기를 기다리지만, 어느 쪽도 자신의 락을 놓지 않으므로 영원히 멈춥니다. CPU를 사용하지 않고 멈추기 때문에, 외부에서 보면 처리가 멈춰 버린 것처럼 보입니다.

  • A. 맞습니다. 서로 상대를 계속 기다리며 나아가지 못합니다.
  • B. 그것은 데이터 레이스입니다.
  • C. 문제없는 평범한 사용법입니다.
이 분야 연습하기 분야로 돌아가기

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

  1. 여러 락을 사용하는 프로그램에서 데드락을 방지하는 가장 일반적인 방법은?
  2. 메모리 일관성 모델(memory consistency model)이 규정하는 것은?
  3. 순차 일관성(sequential consistency)에 대한 설명으로 올바른 것은?
  4. 위의 두 스레드를 서로 다른 코어에서 동시에 실행한다(컴파일러에 의한 재배치는 없다고 가정). 순차 일관성에서는 일어나지 않지만 x86 등의 실제 CPU에서는 일어날 수 있는 결과는?
  5. x86의 메모리 일관성 모델(TSO, Total Store Order)의 특징으로 올바른 것은?

이 분야의 비교