C#多线程的用法7-线程间的协作ManualResetEvent_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > C#多线程的用法7-线程间的协作ManualResetEvent

C#多线程的用法7-线程间的协作ManualResetEvent

 2017/8/22 10:08:56  DW039  程序员俱乐部  我要评论(0)
  • 摘要:ManualResetEvent:手动重置事件,它用于线程间同步时用法非常简单也易于理解。privatestaticvoidMultiThreadSynergicWithManualResetEvent(){ManualResetEventmre=newManualResetEvent(false);Threadthread1=newThread(()=>{mre.WaitOne();mre.Reset();Console.WriteLine("thread1work");mre.Set
  • 标签:C# 用法 多线程 线程

ManualResetEvent:手动重置事件,它用于线程同步时用法非常简单也易于理解

class="brush:csharp;gutter:true;">private static void MultiThreadSynergicWithManualResetEvent()
        {
            
            ManualResetEvent mre = new ManualResetEvent(false);

            Thread thread1 = new Thread(() =>
            {
              
                mre.WaitOne();
                mre.Reset();
                Console.WriteLine("thread1 work");
                mre.Set();
                Thread.Sleep(1000);
            });
            thread1.Start();

            Thread thread2 = new Thread(() =>
            {
                mre.WaitOne();
                Console.WriteLine("thread2 work");
                Thread.Sleep(1000);
            });
            thread2.Start();
            mre.Set();
        }

说明:

1、ManualResetEvent mre = new ManualResetEvent(false)创建一个手动重置事件。initialState参数值为false,表示创建后是否自动发出重置事件通知,false不自动发出。

2、在线程启动后执行mre.Set(),表示向需要通知事件的线程发出mre通知。

3、线程内部mre.WaitOne(),表示线程需要等待mre通知的到来后才能继续执行,线程现在处于等待状态。

4、线程内部mre.WaitOne()后跟mre.Reset(),表示线程得到mre通知后,调用Reset终止通知的向下传递,哪个线程先执行mre.Reset(),它就独占该通知。

5、线程内部mre.Set(),线程执行完必要功能后,再次启动通知并向下传递(向下传递是一种形象的比喻,便于朋友们理解)

上一篇: C#多线程的用法8-线程间的协作AutoResetEvent 下一篇: 没有下一篇了!
发表评论
用户名: 匿名