信號燈 ManualResetEvent 與 Interlocked.Increment 原子操作使
阿新 • • 發佈:2017-07-22
ons timeout manage pre 事件 ren void 繼續 args
class Program { public static int numb = 0; public static int numbb = 100; static ManualResetEvent manu = new ManualResetEvent(false); static void Main(string[] args) { for (int i = 0; i < numbb; i++) { ThreadPool.QueueUserWorkItem(new WaitCallback(ok), i); } //等待事件的完成,即線程調用ManualResetEvent.Set()方法 //eventX.WaitOne 阻止當前線程,直到當前 WaitHandle 收到信號為止。 manu.WaitOne(Timeout.Infinite,true); Console.WriteLine("全部收到信息,完成任務.計數器:{0}",numb); }public static void ok(object x) { for (int i = 0; i < 10; i++) { Console.WriteLine("位置<{0}>,線程ID:<{1}>", i, Thread.CurrentThread.ManagedThreadId); } Interlocked.Increment(ref numb);if (numb==numbb) { manu.Set(); //將事件狀態設置為終止狀態,允許一個或多個等待線程繼續。 } } }
信號燈 ManualResetEvent 與 Interlocked.Increment 原子操作使