CountdownEvent 클래스
ManualResetEvent가 한 쓰레드에서 신호(Signal)을 보내 복수 쓰레드들을 통제하는데 사용되는 반면,
.NET 4.0에 소개된 CountdownEvent는 한 쓰레드에서 복수 쓰레드들로부터의 신호들을 기다리는데 사용된다.
아래는 10개의 쓰레드를 시작한 후, 이 쓰레드들로부터 처음 5개의 신호가 (CountdownEvent.Signal() 메서드) 먼저 도착하는 대로
메인쓰레드는 Wait 대기 상태를 해제하고 다음 문장을 실행하게 된다.
예제
using System;
using System.Threading;
namespace MultiThrdApp
{
class Program
{
// CountdownEvent 객체 필드
static CountdownEvent countEvent = new CountdownEvent(5);
static void Main()
{
// 10개의 쓰레드 시작
// 10개중 5개만 Vote만 끝내면 중지
for (int i = 0; i < 10; i++)
{
new Thread(Vote).Start(i);
}
// 메인쓰레드 첫 5개 신호를 기다림
countEvent.Wait();
Console.WriteLine("Vote is done!");
}
static void Vote(object id)
{
if (countEvent.CurrentCount > 0)
{
// CountdownEvent 신호. -1씩 카운트다운.
countEvent.Signal();
Console.WriteLine("{0}: Vote", id);
}
else
{
Console.WriteLine("{0}: No vote", id);
}
}
}
}
본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.