1. 程式人生 > >信號燈 ManualResetEvent 與 Interlocked.Increment 原子操作使

信號燈 ManualResetEvent 與 Interlocked.Increment 原子操作使

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