더북(TheBook)

이벤트 대신 세마포어로 대체하고, 세마포어의 초깃값을 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();
  }
}

이렇게 세마포어는 원래 용도와 다른 곳에서도 활용할 수 있습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.