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
  

原文地址:https://www.cnblogs.com/wdfrog/p/3422942.html