【问题标题】:Threading Question [duplicate]线程问题[重复]
【发布时间】:2011-01-06 16:02:27
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# multithreading


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      您还可以使用简单的事件来向消费者线程发送队列已满并需要清除的信号。在我看来,信号量处理起来很乏味。同样,这只是个人意见。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-01-28
        • 1970-01-01
        • 1970-01-01
        • 2020-12-06
        • 2012-12-12
        • 1970-01-01
        • 2019-05-22
        相关资源
        最近更新 更多