스레드 둘 이상이 이벤트를 기다리는 경우는 어떻게 될까요? 자동 이벤트라면 여러 스레드 중 한 스레드만 깨어납니다. 수동 이벤트라면 모든 스레드가 다 깹니다. 이벤트 상태 값이 여전히 1을 유지하고 있기 때문입니다.
어떤 이벤트가 발생할 때 모든 스레드를 깨우고 싶다고 가정해 봅시다. 그러면 이렇게 만들면 될 것이라고 짐작하기 마련이죠.
Event event1; void Thread1() { // 이벤트가 신호를 일으킬 때까지 기다린다. event1.Wait(); event1.SetEvent(0); // 이벤트 상태 값을 0으로 바꾼다. } void Thread2() { // 이벤트가 신호를 일으킬 때까지 기다린다. event1.Wait(); event1.SetEvent(0); // 이벤트 상태 값을 0으로 바꾼다. } void Thread3() { // 이벤트에 신호를 준다. event1.SetEvent(); }