더북(TheBook)

스레드 둘 이상이 이벤트를 기다리는 경우는 어떻게 될까요? 자동 이벤트라면 여러 스레드 중 한 스레드만 깨어납니다. 수동 이벤트라면 모든 스레드가 다 깹니다. 이벤트 상태 값이 여전히 1을 유지하고 있기 때문입니다.

어떤 이벤트가 발생할 때 모든 스레드를 깨우고 싶다고 가정해 봅시다. 그러면 이렇게 만들면 될 것이라고 짐작하기 마련이죠.

Event event1;
 
void Thread1()
{
  // 이벤트가 신호를 일으킬 때까지 기다린다.
  event1.Wait();
  event1.SetEvent(0); // 이벤트 상태 값을 0으로 바꾼다.
}
 
void Thread2()
{
  // 이벤트가 신호를 일으킬 때까지 기다린다.
  event1.Wait();
  event1.SetEvent(0); // 이벤트 상태 값을 0으로 바꾼다.
}
 
void Thread3()
{
  // 이벤트에 신호를 준다.
  event1.SetEvent();
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.