이를 위해 다음과 같은 것을 만들어 볼 수도 있습니다.
• 이벤트를 하나 준비합니다. 이 이벤트는 ‘큐에 뭔가가 있다’를 알리는 역할을 합니다.
• 스레드 1은 이벤트를 기다립니다. 그리고 큐에서 항목을 꺼냅니다.
• 스레드 2는 큐에 항목을 넣고 이벤트에 신호를 줍니다.
• 스레드 1·2는 이 일을 계속 반복합니다.
Queue queue; Event queueIsNotEmpty; void Thread1() { while (true) { queueIsNotEmpty.Wait(); queue.PopFront(); } } void Thread2() { while (true) { queue.PushBack(); queueIsNotEmpty.SetEvent(); } }
Tip
코드 이해를 돕고자 큐의 임계 영역 보호 등 여러 가지 조치 내용은 일부러 생략했습니다.