首页 > 代码库 > 信号灯 ManualResetEvent 与 Interlocked.Increment 原子操作使
信号灯 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 原子操作使
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。