信号灯 ManualResetEvent 与 Interlocked.Increment 原子操作使
Posted LarvaAndQing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了信号灯 ManualResetEvent 与 Interlocked.Increment 原子操作使相关的知识,希望对你有一定的参考价值。
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 原子操作使的主要内容,如果未能解决你的问题,请参考以下文章