zoukankan      html  css  js  c++  java
  • ManualResetEvent,AutoResetEvent说明

    相信不少人对ManualResetEvent,AutoResetEvent的状态比较晕,下面是本人认为最精简的理解

    1.只有2种状态,终止态 And 非终止态

    终止状态,既然是状态那么一定对应事物,这里的物指的就是线程了而事则指该线程上执行的某段代码, 某线程调用Set,就表明该线程的某段代码执行完毕,以通知其他等待的线程执行,所以这里终止不能理解成线程终止,事实上调用Set的线程可以继续执行后面的代码。 调用Set或Reset的线程叫控制线程--人家既然可以执行到Set或Reset那么就表名某个线程是活动的并且执行了该代码。

    总结上面的话: "终止状态"指的是控制线程的某个事务(代码)执行完毕.


    终止态:调用ManualResetEvent.Set() 达到,意义--调用线程需要优先或独立执行的任务完成了,其他调用了WaitOne的线程可以进行了.
    非终止态:调用ManualResetEvent.Reset()达到,意义--调用线程还在执行需要优先或独立执行的任务,其他调用了WaitOne的线程需要等待。

    构造函数参数true或false来指定初始状态,true为终止态,fasle为非终止态

    2.AutoResetEvent 与ManualResetEvent类似,但是AutoResetEvent 设置成终止后,如果某个WaitOne调用被放行后,会自动变成非终止状态以继续阻塞其他调用了WaitOne线程执行

    3. x.WaitOne(0, false)  由于设置了超时时间为0,所以不会阻塞当前调用线程,在x为终止态时返回True,在x为非终止态时返回false
      

  • 相关阅读:
    【24点游戏】cocos2dx 源码
    『Python题库
    『Python题库
    【python安装】Windows上安装和创建python开发环境
    『Linux基础
    『Linux基础
    『Linux基础
    『Linux基础
    『Linux基础
    『Python基础-14』匿名函数 `lambda`
  • 原文地址:https://www.cnblogs.com/wdfrog/p/3422942.html
Copyright © 2011-2022 走看看