ConcurrentQueue中的Enqueue和TryDequeue

时间:2012-02-29 12:28:01

标签: c# .net multithreading thread-safety

有一个ConcurrentQueue实例和两个同时访问它的线程。一个线程逐项排列项目(可能在100微秒内排队几个项目)和其他线程TryDequeue逐项排队并进行一些处理。有一个ManualResetEvent在任何项目入队后发出处理线程的信号(这与这个问题没有多大关系)

在这种情况下,是否有可能以错误的顺序向ConcurrentQueue添加项目。我知道它的线程是安全的,但只是想确定它是否在排队和出列的时候不会弄乱项目的顺序。

2 个答案:

答案 0 :(得分:8)

绝对没有办法让这些物品出现故障。

首先,根据定义,队列强制执行FIFO顺序:您将元素放在一端并在另一端取出它们。由于这是由单一生产者 - 单一消费者模型完成的,因此绝对安全。

答案 1 :(得分:1)

这是一个队列!如果它可以重新排序条目,他们会称它为ConcurrentBag或其他东西。生产者 - 消费者队列流水线上无序的唯一方法是,如果有多个消费者线程。