我有一个使用大量并发的方法在指定的ConcurrentBag<T>
中生成大量条目(数十万)。我也有很多该系列的消费者。是否有任何类允许我实现并发(尽可能少的锁)多生产者多用户模式?
我正在考虑使用内置计数器的某种苗条AutoResetEvent
。生产者只需调用.Set()
,这会增加内部计数器,然后释放min(counter, numOfWaitingThreads)
个线程,并将计数器设置为counter -= numOfReleasedThreads
。当消费者打电话给.Wait()
时,他们会首先检查内部计数器,如果它高于0,只需Interlocked.Decrement
它并且不阻止,但直接通过。如果它是0,那么只需等待信号(块)。如果有.Wait(bool)
允许我传入true
并等待SpinLock
一段时间然后恢复锁定以防万一没有await .WaitAsync()
,那就太好了。任何信号都太长了。
所以我想知道,是否有任何内置或自定义类实现这些功能?由于并发性有时难以完全正确,我宁愿使用经过良好测试的解决方案,而不是试图重新发明轮子。
如果我也可以拨打{{1}},也是最好的事情!