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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 单线程的Redis速度为什么快?
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库