생산자 소비자 대기 공간 분리 예제5 분석 질문
질문하신 대기상태에 있던 소비자1이 깨어나서 소비를 하고 producerCond에 signal을 줄때 producerCond에 대기중인 생산자가 하나도 없지 않습니까? 그럼 이때 생산자가 락을 받는다는 100%의 보장이 어떻게 이루어지는지 궁금하시다는 거에 답변드려보겠습니다.먼저 소비자 스레드 3개가 실행되어 대기 집합에 들어간 뒤, 생산자 스레드 3개는 0.1초 마다 실행하게 됩니다.그러므로 생산자 1이 put을 진행하는 동안 생산자 스레드 2,3은 생산자 1의 lock 이 해제될때 까지 기다리고 있는 상태죠.( V2 에서 생산자 먼저 실행해보시면 생산자 스레드 3이 모니터 락을 가진 상태에서 while문을 무한 반복하고 있고, 소비자 스레드 3개 모두 실행되었지만 이미 생산자 스레드 3에서 락을 획득했기 때문에 락이 해제되기 까지 BLOCKED 상태로 로그가 출력됐던 것을 보시면 됩니다. ) 즉, 생산자 1의 lock이 해제되는 순간 다른 생산자 스레드들이 lock을 얻을 수 있게 되는거죠. 먼저 이해하셔야 될 부분이 생산자 스레드들은 대기 집합과 관계없이 lock이 해제되면 바로 실행될 수 있는 상태이고, 소비자 스레드 1,2,3은 생산자 스레드의 signal() 호출을 통해서만 대기 집합에서 나와 작업을 실행할 수 있습니다. 그러므로 질문자님이 물어보신 소비자 1이 깨어나서 소비를 하고 producerCond에 대기중인 생산자가 하나도 없지만 생산자가 락을 100% 받을 수 있는 이유는 소비자 2와3은 대기 집합에서 생산자 스레드의 signal() 호출을 무한정 기다리고 있는 상태이며, 다른 생산자 스레드들은 소비자1 스레드의 unlock() 이 호출되자마자 lock을 획득하여 작업을 수행하기 때문입니다.