C#執行緒同步AutoResetEvent
阿新 • • 發佈:2018-12-07
AutoResetEvent一般用來從一個執行緒向另一個執行緒傳送通知。下面我用兩個執行緒來使用下AutoResetEvent
private static AutoResetEvent _workerEvent = new AutoResetEvent(false);
static void Process(int seconds)
{
Console.WriteLine("Process Start ——Process");
Thread.Sleep(TimeSpan.FromSeconds (seconds));
Console.WriteLine("_workerEvent 傳送訊號 ——Process");
_workerEvent.Set();
Console.WriteLine("Starting Sleep second ——Process");
Thread.Sleep(TimeSpan.FromSeconds(seconds));
_workerEvent.WaitOne();
Console.WriteLine("_workerEvent 釋放 ——Process" );
}
static void Main(string[] args)
{
var t = new Thread(() => Process(10));
t.Start();
Console.WriteLine("請求 _workerEvent");
_workerEvent.WaitOne();
Console.WriteLine("獲得_workerEvent");
Thread.Sleep( TimeSpan.FromSeconds(5));
Console.WriteLine(" _workerEvent 傳送訊號");
_workerEvent.Set();
Console.ReadKey();
}
}
在初始時將AutoResetEvent的值設為false,在AutoResetEvent中會存著一個bool值,false時執行緒阻塞,true執行緒退出阻塞。在以上程式碼中,先執行執行緒t,t會進入休眠,主執行緒中請求_workerEvent訊號量,因為_workerEvent初始化為false,所以處於阻塞狀態,Process執行緒休眠結束執行_workerEvent.Set();
後再次進入休眠,主執行緒中獲得_workerEven後進入休眠,休眠結束後執行_workerEvent.Set();
,Process獲得訊號。
下面是執行後的結果