C# 中EventWaitHandle、AutoResetEvent、ManualResetEvent 和 ManualResetEventSlim的区别
2023-12-13 20:56:15
System.Threading.EventWaitHandle
类表示一个线程同步事件。
同步事件可以处于未发出信号状态或已发出信号状态。 当事件的状态为未发出信号时,调用了事件的WaitOne
重载的线程会被阻止,直到事件处于已发出信号状态。EventWaitHandle.Set
方法可将事件的状态设置为已发出信号。
已发出信号的EventWaitHandle
的行为取决于其重置模式:
- 使用
EventResetMode.AutoReset
标志创建的EventWaitHandle
会在释放单个等待线程后自动进行重置。 就像旋转栅在每次发出信号时仅允许一个线程通过一样。 派生自EventWaitHandle
的System.Threading.AutoResetEvent
类表示该行为。- 在
Reset
方法获得调用前,一直向使用EventResetMode.ManualReset
标志创建的EventWaitHandle
发出信号。 就像接收到信号前保持关闭、然后在被关闭前保持打开的大门一样。 派生自EventWaitHandle
的System.Threading.ManualResetEvent
类表示该行为。System.Threading.ManualResetEventSlim
类是ManualResetEvent
的轻量替代项。- 在 Windows 上,可以将
EventWaitHandle
用于进程间同步。 为此,通过使用指定了名称或EventWaitHandle.OpenExisting
方法的EventWaitHandle
构造函数之一来创建表示指定了已命名系统信号量的EventWaitHandle
实例。
文章来源:https://blog.csdn.net/fwj380891124/article/details/134970997
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!