将Queue与一个生产者和多个消费者一起使用是否安全

时间:2013-09-22 05:16:19

标签: c# .net multithreading queue

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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