多个生产者,多个消费者使用带有计数器的超薄版AutoResetEvent

时间:2015-01-08 11:14:31

标签: c# .net multithreading concurrency producer-consumer

我有一个使用大量并发的方法在指定的ConcurrentBag<T>中生成大量条目(数十万)。我也有很多该系列的消费者。是否有任何类允许我实现并发(尽可能少的锁)多生产者多用户模式?

我正在考虑使用内置计数器的某种苗条AutoResetEvent。生产者只需调用.Set(),这会增加内部计数器,然后释放min(counter, numOfWaitingThreads)个线程,并将计数器设置为counter -= numOfReleasedThreads。当消费者打电话给.Wait()时,他们会首先检查内部计数器,如果它高于0,只需Interlocked.Decrement它并且不阻止,但直接通过。如果它是0,那么只需等待信号(块)。如果有.Wait(bool)允许我传入true并等待SpinLock一段时间然后恢复锁定以防万一没有await .WaitAsync(),那就太好了。任何信号都太长了。

所以我想知道,是否有任何内置或自定义类实现这些功能?由于并发性有时难以完全正确,我宁愿使用经过良好测试的解决方案,而不是试图重新发明轮子。

如果我也可以拨打{{1}},也是最好的事情!

0 个答案:

没有答案