C# 线程问题

C# 线程问题,c#,multithreading,C#,Multithreading,可能重复: 我有典型的生产者和消费者线程问题。然而,唯一的区别是,生产者被允许建立一个包含5个项目的缓冲区,在此之后,它必须等待,直到一些项目被消费 在c#中实现这一点的最佳解决方案是什么。 目前我已经使用信号量实现了它,但是生产者似乎非常迅速地建立了一个超过100项的缓冲区。我没有语法来处理将缓冲区限制为5项的问题。我在考虑使用一个静态整数——让生产者增加它——当它达到5时,生产者进入睡眠状态。让消费者减少它并唤醒生产者。为什么不使用有界队列(大小5)并在队列已满时阻止生产者?为什么不使用有

可能重复:

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

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

为什么不使用有界队列(大小5)并在队列已满时阻止生产者?

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

您可以使用一个队列,确保所有数据包都是先进先出的。然而,由于您提到队列很快就会被填满,我认为您可能希望将队列限制增加到更大的数量。你们提到你们将使用睡眠来避免在队列中填充超过5个数据,我觉得生产者的生产速度要比消费者高很多。所以,您可能需要根据需求优化队列大小


此外,您还可以使用简单事件向使用者线程发送信号,告知队列已满且需要清除。在我看来,信号量的处理变得单调乏味。同样,这只是个人意见。

您可以使用一个队列来确保所有数据包都是先进先出的。然而,由于您提到队列很快就会被填满,我认为您可能希望将队列限制增加到更大的数量。你们提到你们将使用睡眠来避免在队列中填充超过5个数据,我觉得生产者的生产速度要比消费者高很多。所以,您可能需要根据需求优化队列大小

此外,您还可以使用简单事件向使用者线程发送信号,告知队列已满且需要清除。在我看来,信号量的处理变得单调乏味。再说一次,这只是个人意见