gpt4 book ai didi

c# - AutoResetEvent 和 ManualResetEvent 之间的混合

转载 作者:行者123 更新时间:2023-12-03 13:21:29 24 4
gpt4 key购买 nike

我想知道是否有任何混合 EventWaitHandle 会在调用 .Set() 时自动重置其状态,因为 AutoResetEvent 正在执行此操作,同时将允许执行 .WaitOne() 的每个人通过与 ManualResetEvent 相同的操作。

我想出的唯一一个解决方案是使用 ManualResetEvent 并执行以下操作的非常丑陋的解决方案:

event.Set();
Thread.Sleep(100);
event.Reset();

这样做的更好方法是什么?
谢谢。

更新:
感谢汉斯,我想出了以下解决方案。
看起来它有效:
class HybridWaitHandle
{

private bool signal = false;
private readonly object locker = new object();
private int blocked = 0;

void WaitOne()
{
lock (locker)
{
blocked++;

while (!signal) Monitor.Wait(locker);

blocked--;

if (blocked == 0)
signal = false;
}
}

void Set()
{
lock (locker)
{
signal = true;
Monitor.PulseAll(locker);
}
}

}

最佳答案

请改用 Monitor.PulseAll()。称为“有界缓冲区”,示例代码is here .在 .NET 4 中作为 BlockingCollection<> 可用。

关于c# - AutoResetEvent 和 ManualResetEvent 之间的混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7585033/

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