zoukankan      html  css  js  c++  java
  • 关于AutoResetEvent与ManualResetEvent用法的说明

    关于AutoResetEvent与ManualResetEvent用法的说明

    这两个类都是EventWaitHandle的子类。

    主要也是用于线程同步,先看代码:

    class Program
        {
            //static AutoResetEvent doEvent = new AutoResetEvent(false);
            static ManualResetEvent doEvent = new ManualResetEvent(false);
            static void Main(string[] args)
            {
                Thread t1 = new Thread(DoSomething);
                t1.Start();
                Thread t2 = new Thread(DoSomething2);
                t2.Start();
                Thread.Sleep(3000);
                Console.WriteLine("Begin set AutoResetEvent");
                doEvent.Set();
                Console.ReadKey();
            }
    
            static void DoSomething()
            {
                doEvent.WaitOne();
                Console.WriteLine("thread1 do some");        
            }
    
            static void DoSomething2()
            {
                doEvent.WaitOne();
                Console.WriteLine("thread2 do some");
            }
        }

    结果分析:

    假设AutoResetEvent初始设置为true,那么线程就可以执行下去,waitone就不需要等待,

    线程1退出后,doEvent自动复位,不会去继续触发信号,所以必须等到再次set后,线程2才会执行。结果如下:

     假设AutoResetEvent初始设置为false,必须set后才能让线程得到响应,因为会自动复位,所以不会继续触发,所以只有一个线程可以得到执行。结果如下:

    假设是ManualResetEvent,初始设置为true,因为初始就触发,所以线程可以得到响应,又因为他不会自动复位,所以一直处于触发状态,两个线程都会得到响应,要想不触发除非调用Reset函数,结果如下:

    假设是ManualResetEvent,初始状态是False,一开始不会触发,线程不会响应,等到set后,线程1,线程2同时得到响应,因为他不会自动复位。

     

    https://files.cnblogs.com/files/monkeyZhong/TestEventHandle.zip

  • 相关阅读:
    Python——thread
    Python——dummy_thread( _dummy_thread in Python 3.+)
    Python——pyiso8601
    Python——os(一)进程参数
    Python——eventlet.hubs
    Python——eventlet.backdoor
    Python——eventlet.greenthread
    解决zabbix可用性为灰色状态
    实时查看docker容器日志
    docker pull 报错Get https://xxx.xxx.xxx.xxx:5000/v1/_ping: http: server gave HTTP response
  • 原文地址:https://www.cnblogs.com/monkeyZhong/p/14158910.html
Copyright © 2011-2022 走看看