ManualResetEvent手動重置事件,它用於現場間同步時用法非常簡單也易於理解。 ...
ManualResetEvent:手動重置事件,它用於線程間同步時用法非常簡單也易於理解。
private static void MultiThreadSynergicWithManualResetEvent() { ManualResetEvent mre = new ManualResetEvent(false); Thread thread1 = new Thread(() => { mre.WaitOne(); mre.Reset(); Console.WriteLine("thread1 work"); mre.Set(); Thread.Sleep(1000); }); thread1.Start(); Thread thread2 = new Thread(() => { mre.WaitOne(); Console.WriteLine("thread2 work"); Thread.Sleep(1000); }); thread2.Start(); mre.Set(); }
說明:
1、ManualResetEvent mre = new ManualResetEvent(false)創建一個手動重置事件。initialState參數值為false,表示創建後是否自動發出重置事件通知,false不自動發出。
2、線上程啟動後執行mre.Set(),表示向需要通知事件的線程發出mre通知。
3、線程內部mre.WaitOne(),表示線程需要等待mre通知的到來後才能繼續執行,線程現在處於等待狀態。
4、線程內部mre.WaitOne()後跟mre.Reset(),表示線程得到mre通知後,調用Reset終止通知的向下傳遞,哪個線程先執行mre.Reset(),它就獨占該通知。
5、線程內部mre.Set(),線程執行完必要功能後,再次啟動通知並向下傳遞(向下傳遞是一種形象的比喻,便於朋友們理解)