gpt4 book ai didi

c# - ReaderWriterLockSlim 和脉冲/等待

转载 作者:太空宇宙 更新时间:2023-11-03 14:30:41 24 4
gpt4 key购买 nike

是否有等效的 Monitor.PulseMonitor.Wait 可以与 ReaderWriterLockSlim 结合使用?

我有一个类,其中封装了对底层队列的多线程访问。为了对某些东西进行排队,我获得了一个锁来保护底层队列(以及一些其他对象),然后添加该项目和 Monitor.Pulse 锁定的对象以表示某些东西已添加到队列中。

public void Enqueue(ITask task)
{
lock (mutex)
{
underlying.Enqueue(task);
Monitor.Pulse(mutex);
}
}

在队列的另一端,我有一个后台线程在消息到达队列时持续处理消息。它在队列中没有项目时使用 Monitor.Wait 以避免不必要的轮询。 (我认为这是一个很好的设计,但如果能帮助我了解其他情况,欢迎任何火焰(在合理范围内)。)

private void DequeueForProcessing(object state)
{
while (true)
{
ITask task;
lock (mutex)
{
while (underlying.Count == 0)
{
Monitor.Wait(mutex);
}
task = underlying.Dequeue();
}
Process(task);
}
}

随着越来越多的操作被添加到这个类中(需要对底层 protected 锁进行只读访问),有人建议使用 ReaderWriterLockSlim。我以前从未使用过该类,假设它可以提供一些性能优势,我并不反对它,但前提是我可以保留 Pulse/Wait 设计。

最佳答案

不,基本上。它经过优化以提供一些特定/常见的场景。如果您超出这些场景,它将无法正常工作。如果您需要 Pulse 等,请改用 Monitor

关于c# - ReaderWriterLockSlim 和脉冲/等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2691703/

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