멀티코어와 동기화
여러 락을 사용하는 프로그램에서 데드락을 방지하는 가장 일반적인 방법은?
- A모든 스레드가 락을 잡는 순서를 프로그램 전체에서 동일하게 정해 둔다
- B락을 잡으면 절대 해제하지 않도록 한다
- C스레드 수를 2개 이하로 한다
정답과 해설 보기
정답: A. 모든 스레드가 락을 잡는 순서를 프로그램 전체에서 동일하게 정해 둔다
데드락은 스레드들이 서로 상대가 가진 락을 기다리는 「순환」이 생기면 일어납니다. 예를 들어 「반드시 A를 잡은 다음 B를 잡는다」를 모두가 지키면, B를 가진 채 A를 기다리는 스레드가 나타나지 않아 순환이 생기지 않습니다. 그 밖에도 한 번에 필요한 락을 한꺼번에 잡는 방법, 잡지 못하면 가지고 있는 락을 놓고 재시도하는 방법 등이 있습니다.
- A. 맞습니다. 대기의 순환이 생기지 않게 됩니다.
- B. 해제하지 않으면 다른 스레드가 영원히 기다립니다.
- C. 두 스레드에서도 데드락은 일어납니다.