위는 내가 사용한 thread 클래스.
아래는 그걸로 만든 데드록 예시.
왜 이런일이 발생하느냐.
운영체제에서 mutex 가지고 놀 때 알려주는 deadlock 의 조건을 생각하면 된다.
난 quad core 컴퓨터라서 main thead 외에 3개의 추가 스레드가 주어진다.
main thread 는 main 문을 돌고 있을 것이다.
스레드는 3개 뿐인데 job 의 갯수는 9개 이다. 게다가 3, 3, 3 으로 나누어져 있어서 나뉜 내부의 각각은 종속적이다. 왜냐하면 while(job < 3) 이 있기 때문이다. 여기서 job 의 갯수가 3인 것과 스레드 갯수를 생각해보면 답이 나온다. 그 결과는 스레드 각각 while 문에 잡혀있는 위의 스크린 샷이다.
가만히 그것만 골똘히 생각하면 쉽게 답이 유추되지만 이걸 의식하지 않으면 거기까지 생각이 미치지 않는다.
다 그렇단말이 아니라 내가 그렇다.
몇시간 뻘짓했다.
댓글 없음:
댓글 쓰기