1. 程式人生 > >C#執行緒同步AutoResetEvent

C#執行緒同步AutoResetEvent

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獲得訊號。
下面是執行後的結果
在這裡插入圖片描述