【问题标题】:Is it safe to use Queue with one producer and multiple consumers将队列与一个生产者和多个消费者一起使用是否安全
【发布时间】:2013-09-22 05:16:18
【问题描述】:

我需要在具有多个消费者的多线程情况下实现一个队列,但只有一个线程会修改队列(入队)。使用 Queue 是否安全,或者我应该考虑使用 ConcurrentQueue?

【问题讨论】:

    标签: c# .net multithreading queue


    【解决方案1】:

    EnqueueDequeue 都是修改队列的操作。所以,如果有一个线程调用Enqueue,另一个线程调用Dequeue,那么这两个调用需要同步。

    【讨论】:

      【解决方案2】:

      如果您使用的是框架 4 或更高版本,那么更好的选择是使用专为生产者/消费者模式设计的BlockingCollection(默认情况下它在内部是一个 ConcurrentQueue)。它使您可以轻松地协调线程之间的生产和消费,而无需过多考虑锁/监视器。只需使用GetConsumingEnumerable() 来消费项目,无需任何其他手动同步工作。 MSDN Example

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-17
        • 2023-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多