그림 1-27의 코드는 교착 상태를 보여 줍니다.
▲ 그림 1-27 프로그램이 이러한 순서로 실행되면 교착 상태 발생
컨텍스트 스위치로 두 스레드를 번갈아 실행 중이라고 했을 때, 먼저 왼쪽에 있는 lock(a)가 실행됩니다. 그러고 나서 오른쪽 스레드에 있는 lock(b)가 실행됩니다. a는 왼쪽 스레드가 잠갔고, b는 오른쪽 스레드가 잠갔습니다.
이 상태에서 왼쪽 스레드의 lock(b)를 실행합니다. b는 이미 오른쪽 스레드로 잠근 상태입니다. 따라서 왼쪽 스레드는 오른쪽 스레드가 b를 풀어 줄 때까지 기다려야 합니다.
이제 오른쪽 스레드의 lock(a)가 실행됩니다. a는 이미 왼쪽 스레드로 잠근 상태입니다. 따라서 오른쪽 스레드는 왼쪽 스레드가 a를 풀어 줄 때까지 기다립니다.
양쪽 모두 상대방의 일 처리가 끝나기를 기다리지만, 끝이 날 방법이 없습니다. 이것이 교착 상태입니다.