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

  • 相关阅读:
    app测试点
    【Android自动化打包】03. APK的数字签名
    【转】测试架构师团队的管理
    【转】用户体验质量的测试方法论-“你的风扇方案”
    【转】大数据本质与测试
    jquery 获取下拉框值与select text
    js获取下拉,单选
    jquery插件
    加密
    plsql 只能识别32位的oracle解决办法
  • 原文地址:https://www.cnblogs.com/monkeyZhong/p/14158910.html
Copyright © 2011-2022 走看看