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

  • 相关阅读:
    Cents 7 Kubernetes
    Docker registry
    centos 7 安装 docker
    ToList()所带来的性能影响
    C#之Linq、where()、FindAll()的区别
    2.2 数据库高速缓冲区
    ORACLE之autotrace使用
    spring.net简介
    初识批处理
    TIBCO Rendezvous — 技术介绍
  • 原文地址:https://www.cnblogs.com/dw039/p/7409249.html
Copyright © 2011-2022 走看看