C# 中EventWaitHandle、AutoResetEvent、ManualResetEvent 和 ManualResetEventSlim的区别

2023-12-13 20:56:15

System.Threading.EventWaitHandle 类表示一个线程同步事件。
同步事件可以处于未发出信号状态或已发出信号状态。 当事件的状态为未发出信号时,调用了事件的 WaitOne 重载的线程会被阻止,直到事件处于已发出信号状态。 EventWaitHandle.Set 方法可将事件的状态设置为已发出信号。
已发出信号的 EventWaitHandle 的行为取决于其重置模式:

  • 使用 EventResetMode.AutoReset 标志创建的 EventWaitHandle 会在释放单个等待线程后自动进行重置。 就像旋转栅在每次发出信号时仅允许一个线程通过一样。 派生自 EventWaitHandleSystem.Threading.AutoResetEvent 类表示该行为。
  • Reset 方法获得调用前,一直向使用 EventResetMode.ManualReset 标志创建的 EventWaitHandle 发出信号。 就像接收到信号前保持关闭、然后在被关闭前保持打开的大门一样。 派生自 EventWaitHandleSystem.Threading.ManualResetEvent 类表示该行为。
  • System.Threading.ManualResetEventSlim 类是 ManualResetEvent 的轻量替代项。
  • 在 Windows 上,可以将 EventWaitHandle 用于进程间同步。 为此,通过使用指定了名称或 EventWaitHandle.OpenExisting 方法的 EventWaitHandle 构造函数之一来创建表示指定了已命名系统信号量的 EventWaitHandle 实例。

文章来源:https://blog.csdn.net/fwj380891124/article/details/134970997
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。