【问题标题】:Is Data order of BlockingCollection queue guaranteed when data is added by multiple threads?多线程添加数据时,BlockingCollection队列的数据顺序是否有保证?
【发布时间】:2018-07-26 06:08:06
【问题描述】:

我正在使用 BlockingCollection 类实现的队列来实现生产者-消费者模型队列。

我有多个线程以指定的顺序添加元素(仅针对每个线程),一个线程从中取出元素。

我不关心在不同线程之间添加的元素的顺序,但我希望每个线程添加的元素按照添加的顺序排列。

BlockingCollection 类是否保证这一点?我用谷歌搜索了它,但找不到我的问题的明确答案。

【问题讨论】:

  • BlockingCollection 包装了另一种连接类型。您是否在其构造函数中明确提供了一个?如果是这样,看看它的保证。如果没有,它将使用ConcurrentQueue - 所以请查看该类型的保证。
  • 是的,我提供了 CocurrentQueue。如果每个线程都应该保证元素顺序,因为它是 FIFO .. 我是对的吗?

标签: c# .net multithreading producer-consumer blockingcollection


【解决方案1】:

ConcurrentQueue<T>BlockingCollection<T> 后面的默认集合声明它是:

线程安全的先进先出 (FIFO) 集合。

他们觉得没有必要在类文档本身或EnqueueTryDequeue 的文档中强调任何其他线程问题。

我希望记录更强大的东西,我认为这就是您正在寻找的东西,但我能提供的最好的是,它说它是 FIFO,我必须相信它是。

【讨论】:

    猜你喜欢
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-29
    • 2011-12-26
    • 2021-11-07
    • 1970-01-01
    相关资源
    最近更新 更多