이벤트 대신 세마포어로 대체하고, 세마포어의 초깃값을 0으로 설정해 줍시다. 그리고 이벤트에 신호를 주는 대신 세마포어에 “자원 액세스가 다 끝났다.”라고 통보해 줍시다. 현재 여기서는 자원 액세스 개념을 다루지 않으므로 어색하게 들릴 수도 있지만 무시합시다. 어쨌거나 세마포어는 이 경우 상태 값을 1 증가시킵니다.
Queue queue; Semaphore queueIsNotEmpty; void Main() { // 초깃값이 0인 세마포어를 만든다. queueIsNotEmpty = new Semaphore(0); } void Thread1() { while (true) { queueIsNotEmpty.Wait(); queue.PopFront(); } } void Thread2() { while (true) { queue.PushBack(); queueIsNotEmpty.Release(); } }
이렇게 세마포어는 원래 용도와 다른 곳에서도 활용할 수 있습니다.