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

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

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