더북(TheBook)

그림 1-27의 코드는 교착 상태를 보여 줍니다.

▲ 그림 1-27 프로그램이 이러한 순서로 실행되면 교착 상태 발생

 

컨텍스트 스위치로 두 스레드를 번갈아 실행 중이라고 했을 때, 먼저 왼쪽에 있는 lock(a)가 실행됩니다. 그러고 나서 오른쪽 스레드에 있는 lock(b)가 실행됩니다. a는 왼쪽 스레드가 잠갔고, b는 오른쪽 스레드가 잠갔습니다.

이 상태에서 왼쪽 스레드의 lock(b)를 실행합니다. b는 이미 오른쪽 스레드로 잠근 상태입니다. 따라서 왼쪽 스레드는 오른쪽 스레드가 b를 풀어 줄 때까지 기다려야 합니다.

이제 오른쪽 스레드의 lock(a)가 실행됩니다. a는 이미 왼쪽 스레드로 잠근 상태입니다. 따라서 오른쪽 스레드는 왼쪽 스레드가 a를 풀어 줄 때까지 기다립니다.

양쪽 모두 상대방의 일 처리가 끝나기를 기다리지만, 끝이 날 방법이 없습니다. 이것이 교착 상태입니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.