더북(TheBook)

스레드 t1은 임계 영역 a, b 순서로 잠금하고 잠금 해제를 합니다. 스레드 t2는 임계 영역 b, a 순서로 잠금과 잠금 해제를 합니다. 이를 무한 반복합니다. 무한 반복을 하는 이유는 그림 1-27과 같은 상황을 정확하게 재현하지 못할 가능성이 있기 때문입니다.

이 프로그램을 실행하면 두 스레드는 잠금-잠금 해제를 무한 반복하다가 어느 순간에 교착 상태를 일으킵니다. 콘솔 창에 계속 출력되다가 어느 순간부터 잠잠해지는 것으로 교착 상태를 일으킨 것을 알 수 있습니다.

t1 done.
t1 done.
t1 done.
t1 done.
t1 done.
t1 done.
t1 done.
t1 done.
t1 done.
t1 done.
t1 done.
t1 done.
(멈춤)

 

교착 상태를 일으킨 상태에서 디버그 중지(debug break) 버튼을 눌러 봅시다. Visual Studio에서는 Debug/Break All 메뉴 혹은 툴바에서 Break All이라고 표시되는 아이콘입니다.

▲ 그림 1-28 디버그 중지 버튼

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