이번엔 윤종현님이 놀라움을 표현해주신 '데드락 스레드를 찾을 수 있는 함수!'에 대해 자세히 살펴보겠습니다.
돌려보니 정말로 잘 찾아냅니다.
오해로 뒤엉켜 사랑에서 빠져나오지 못하는 가슴 아픈 두 스레드를 검출해줍니다.
메서드 이름이 충분히 직관적이라 별다른 설명은 필요없지만 예제코드 89라인에서
interrupt()로 데드락을 빠져나와보려는 무의미한 시도를 해본 것처럼
결과적으로 검출해서 뭐하지?
하는 생각이 들지 않을 수 없습니다.
이에 method-doc 에는 이렇게 써있습니다.
This method is designed for troubleshooting use, but not for synchronization control. It might be an expensive operation.
그렇습니다. 데드락을 찾아서 뭔가 해결을 해줄 수 있다면야, MXBean 계열에 이녀석이 포함되어있지도 않았을 것입니다.
아무튼 synchronized 키워드의 blocking을 강제로 피하게 할 수 없다는 것은 여전히 슬픈 일입니다.
ReetrantLock.tryLock은 timeout을 받을 수 있고 interruptable 이므로 데드락 검출시 이를 해결해줄 수
있겠다는 생각을 하여 ReetrantLock을 사용하여 Deadlock2 예제를 만들어보았습니다.
와와 데드락 검출 후 해당 thread.interrupt()로 데드락을 붕괘시키는데 성공했습니다! ㅎㅎ
한가지 아쉬운 것은, 스레드가 데드락인지 검출할 수 있다면 pair로 찾거나 서로 엉킨 녀석들을 세트로 묶어 리턴해준다면 더 좋았지 않았을까 하는 생각이 듭니다.
데드락 특성상 한 놈만 포기해주면 나머지가 행복해질 수 있는거니 말입니다.
생각해보니, 데드락된 스레드들의 stack을 덤프해다 담당 프로그래머에게 던져주며 "야
" 하면 되겠군요..![]()
Comments
5 thoughts shared
Continue Reading
Discover more thoughts and insights
Resin 3.0.18의 PHP 5 Cleanroom 구현 Quercus
http://wiki.caucho.com/Quercus Caucho가 자바로 클린룸 형태의 PHP 5를 구현했다! 비록 내 홈페이지에서 사용하는 블로그인 Soojung을 바로 포팅하는데는 실패했지만, 기본적인
청강 Festival 2004
2004년 10월 28, 29, 30일은 청강문화산업대학 Festival 2004 였습니다. 저희 회사(LeapSoft)는 청강대 창업보육센터에 입주해 있기 때문에, 축제가 있으면 부스를 설치하고 제품들을 전시할
커널 컴파일
리눅스에 광팬은 아니지만, 그래도 업무환경상 리눅스/유닉스 환경이 껴있어서 집에서도 리눅스를 쓰곤 합니다. (주 데스크탑은 윈도우즈이지만) 그렇지만 얕은 깊이의 커널컴파일 외에는 시스템 자체에는 별로 신경쓴적이