码迷,mamicode.com
首页 > 其他好文 > 详细

信号灯 ManualResetEvent 与 Interlocked.Increment 原子操作使

时间:2017-07-22 21:02:54      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:信息   rgs   public   object   设置   ogr   ram   线程   ring   

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 原子操作使

标签:信息   rgs   public   object   设置   ogr   ram   线程   ring   

原文地址:http://www.cnblogs.com/larva/p/7222336.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!