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

  • 相关阅读:
    2018 ICPC南京网络赛 A An Olympian Math Problem(数论题)
    算法竞赛模板 素数测试(Miller-Rabin测试)
    算法竞赛模板 tarjan算法
    2018 CCPC网络赛 1004 Find Integer(勾股数+费马大定理)
    算法竞赛模板 概率dp
    算法竞赛模板 重载运算符
    算法竞赛模板 矩阵快速幂
    算法竞赛模板 回文素数
    算法竞赛模板 AC自动机
    算法竞赛模板 拓扑排序
  • 原文地址:https://www.cnblogs.com/monkeyZhong/p/14158910.html
Copyright © 2011-2022 走看看