gpt4 book ai didi

c# - AutoResetEvent 何时重置?

转载 作者:行者123 更新时间:2023-12-01 23:27:03 25 4
gpt4 key购买 nike

即使使用多年,我仍然不明白 AutoResetEvent 是如何工作的。

当谈到Set()时,是否应该有一部分代码在某处等待WaitOne()

也就是说..如果在WaitOne()之前成功调用了Set(),那么在WaitOne()之前会自动Reset吗> 然后我会想念 Set 吗?

或者换句话说 - WaitOne() 是否使标志重置?

最佳答案

来自documentation :

The Set method releases a single thread. If there are no waiting threads, the wait handle remains signaled until a thread attempts to wait on it, or until its Reset method is called.

所以回答问题:

  • 不必调用WaitOneReset 也会取消句柄信号。 (让一个类依赖于其他类的正确行为将是糟糕的设计。
  • 在线程等待句柄或在 AutoResetEvent 上调用 Reset 之前,句柄保持信号状态。所以 Set 不会错过。当两个线程等待时,一个 Set 可能会丢失。查看文档:

There is no guarantee that every call to the Set method will release a thread. If two calls are too close together, so that the second call occurs before a thread has been released, only one thread is released - as if the second call did not happen. Also, if the Set method is called when there are no threads waiting and the AutoResetEvent is already signaled, the call has no effect.

  • WaitOne 会取消向句柄发出信号,但并非每次等待都能保证做到这一点(请参阅前面的评论)

从你的问题中我得到的印象是它会帮助你更仔细地阅读文档,也许看看 the source code您将看到 .NET 类包装了 Windows Event 对象。参见 this article获取有关如何/可以使用 Event 对象的更多信息。

关于c# - AutoResetEvent 何时重置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59261959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com