더북(TheBook)

세 번째 줄에 스레드 21048이 있습니다. 이번에는 이 스레드의 호출 스택을 봅시다.

▲ 그림 1-34 b_mutex를 놓아주지 않고 쥐고 있는 스레드의 호출 스택

 

실행 지점 에서 교착 상태를 일으켰으며 이와 연관된 뮤텍스는 a_mutex입니다. 그 내용을 봅시다(). OwningThread가 1bf4, 즉 7156을 가리키고 있습니다. 이는 처음에 우리가 보았던 스레드였습니다. 이것으로 스레드 7156과 스레드 21048이 서로를 기다리고 있음을 알 수 있습니다.

뮤텍스가 여럿일 때 교착 상태를 일으키지 않게 하는 방법이 있습니다. 이는 잠금 순서의 규칙으로 설명할 수 있으며, 1.8절에서 알아보겠습니다.

Tip

이 예제는 간단한 프로그램이라 굳이 이렇게 디버거를 걸지 않아도 금방 문제를 확인할 수 있었습니다. 하지만 프로그램 크기가 클 때는 디버거를 활용해야 빠른 시간 안에 문제를 찾을 수 있으므로 이러한 기법을 알아 두면 좋습니다.

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