线程问题

时间:2010-01-19 05:15:16

标签: c# multithreading

  

可能重复:
  Creating a blocking Queue<T> in .NET?

我有典型的生产者和消费者线程问题。但是唯一的区别是允许生产者建立一个包含5个项目的缓冲区,之后它必须等到某些项目被消耗掉。

在c#中实现此功能的最佳解决方案是什么? 目前我使用信号量实现它,但生产者似乎非常迅速地建立了超过100个项目的缓冲区。我没有语法来处理将缓冲区限制为5个项目。我正在考虑使用一个静态整数 - 让生产者增加它 - 当它达到5时,生产者进入睡眠状态。让消费者减少它并唤醒生产者。

2 个答案:

答案 0 :(得分:5)

为什么不使用有界队列(大小为5)并且如果队列已满,则让生产者阻塞?

答案 1 :(得分:0)

您可以使用一个队列来确保所有数据包的先进先出。但是,由于您提到队列快速填充,我认为您可能希望将队列限制增加到更大的数量。你提到你会使用sleep来避免在队列中填充5个以上的数据,我觉得生产者的生产率远高于消费者。因此,您可能需要根据需求优化队列大小。

此外,您可以使用简单事件来通知消费者线程队列已填满且需要清除。在我看来,信号量变得很乏味。同样,这只是个人意见。