zoukankan      html  css  js  c++  java
  • C#多线程的用法7-线程间的协作ManualResetEvent

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

    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(),线程执行完必要功能后,再次启动通知并向下传递(向下传递是一种形象的比喻,便于朋友们理解)

  • 相关阅读:
    poj 1753 -- Flip Game
    hdu 2209 -- 翻纸牌游戏
    文件系统的挂载与卸载挂载
    我的vim配置(一)
    Poj 3687 -- Labeling Balls
    主动激发“onclick”事件;prompt
    this
    函数嵌套
    调用函数时传递的实参个数arguments.length; ,函数定义时的形参个数sum.length
    回调函数,用户定义的排序规则
  • 原文地址:https://www.cnblogs.com/dw039/p/7409249.html
Copyright © 2011-2022 走看看