相信不少人对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

ManualResetEvent,AutoResetEvent说明的更多相关文章

  1. 重新想象 Windows 8 Store Apps (47) - 多线程之线程同步: Semaphore, CountdownEvent, Barrier, ManualResetEvent, AutoResetEvent

    [源码下载] 重新想象 Windows 8 Store Apps (47) - 多线程之线程同步: Semaphore, CountdownEvent, Barrier, ManualResetEve ...

  2. ManualResetEvent & AutoResetEvent

      参考资料: 1. https://msdn.microsoft.com/en-us/library/system.threading.manualresetevent.aspx 2. https: ...

  3. AutoResetEvent和ManualResetEvent理解 z

    AutoResetEvent和ManualResetEvent用于多线程之间代码执行顺序的控制,它们继承自WaitHandle,API相同,但在使用中还是有区别的. 每次使用时虽然理解了,但由于没有去 ...

  4. AutoResetEvent和ManualResetEvent理解

    AutoResetEvent和ManualResetEvent用于多线程之间代码执行顺序的控制,它们继承自WaitHandle,API相同,但在使用中还是有区别的. 每次使用时虽然理解了,但由于没有去 ...

  5. C# Event 内核构造 |EventWaitHandle、AutoResetEvent、 ManualResetEvent

    EventWaitHandle 继承:Object->WaitHandle-> EventWaitHandle派生:System.Threading.AutoResetEvent\Syst ...

  6. C# 同步转异步 AutoResetEvent

    当我们的程序运行时,调用了一段异步的逻辑A,这段异步的逻辑无法转化为同步(如动画.下载进度等) 而,我们又需要等待异步逻辑A处理完成,然后再执行其它逻辑B. AutoResetEvent 同步转异步 ...

  7. C#与C++的发展历程第三 - C#5.0异步编程巅峰

    系列文章目录 1. C#与C++的发展历程第一 - 由C#3.0起 2. C#与C++的发展历程第二 - C#4.0再接再厉 3. C#与C++的发展历程第三 - C#5.0异步编程的巅峰 C#5.0 ...

  8. C#并发编程

    并发编程,一直是小白变成(●—●)的一个坎.平时也用到过不少并发编程操作,在这里进行一下记录. 多线程并不是唯一 并发:同时做多件事情. 多线程:并发的一种形式,采用多线程来执行程序. 并行处理:把正 ...

  9. C#多线程操作界面控件的解决方案(转)

    C#中利用委托实现多线程跨线程操作 - 张小鱼 2010-10-22 08:38 在使用VS2005的时候,如果你从非创建这个控件的线程中访问这个控件或者操作这个控件的话就会抛出这个异常.这是微软为了 ...

随机推荐

  1. iperf/iperf3网络测试工具的安装与使用

    1.官网及下载路径: iperf3 homepage at: http://software.es.net/iperf/Report bugs to: https://github.com/esnet ...

  2. Oracle SYS_CONTEXT用法

    1. USERENV(OPTION) 返回当前的会话信息. OPTION='ISDBA'若当前是DBA角色,则为TRUE,否则FALSE. OPTION='LANGUAGE'返回数据库的字符集. OP ...

  3. vs2010 光盘镜像免输入KEY 序列号

    用ULTRA ISO打开VS2010 ISO文件.找到\Setup\setup.sdb,提取出来编辑.用记事本打开.搜索到[Product Key]配置节,如果下面为空,补上KEY.如果是试用KEY, ...

  4. php的静态变量的实现

    1.静态变量的结构 php脚本编译之后会生成执行opcode组成的opcode_array,执行每个zend_op_array都会生成一个单独的zend_execute_data结构. php的局部变 ...

  5. bzoj4542 大数

    Description 小 B 有一个很大的数 S,长度达到了 N 位:这个数可以看成是一个串,它可能有前导 0,例如00009312345.小B还有一个素数P.现在,小 B 提出了 M 个询问,每个 ...

  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">的说明

    今天在做适配手机版时,chrome调到手机版,但是还是显示PC端的样式,无法展现出手机端的样式: 开始的时候还以为是chrome版本的问题,最新版本的chrome62.0是有很多变化的,而之前工作中使 ...

  7. Java 从原字符串中截取一个新的字符串 subString()

    Java 手册 substring public String substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串.该子字符串从指定索引处的字符开始,直 ...

  8. 汇编_指令_SHL、SHR、SAL、SAR、ROL、ROR、RCL、RCR

    ;SHL(Shift Left):      逻辑左移 ;SHR(Shift Right):      逻辑右移 ;SAL(Shift Arithmetic Left): 算术左移 ;SAR(Shif ...

  9. json中key大小写转换

    最近工作中遇到json格式的字符串中的key为大写的,需要转换成小写的来解析,开始想使用正则来替换,结果不是很方便,后来考虑把JSONObject重新来封装. 如下json格式:{PWACHECKIN ...

  10. laravel下载文件

    public function jobDownload(){ $realPath = public_path('download/job/postForm.xls'); $filename = '应聘 ...