首页 > 其他 > 详细

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

时间:2017-07-22 20:46:31      阅读:285      评论:0      收藏:0      [点我收藏+]
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 原子操作使

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!