【发布时间】:2012-03-18 22:37:21
【问题描述】:
有一个 ConcurrentQueue 实例和两个并发访问它的线程。一个线程将项目连续入队(可能在 100 微秒内将几个项目入队),另一个线程逐项尝试出队并进行一些处理。在任何项目入队后都有一个 ManualResetEvent 向处理线程发出信号(这与这个问题不太相关)
在这种情况下,是否有可能以错误的顺序将项目添加到 ConcurrentQueue。我知道它是线程安全的,但只是想确保在入队和出队更快时它是否不会弄乱项目的顺序。
【问题讨论】:
-
'有一个ManualResetEvent来在任何项目入队后向处理线程发出信号':(
-
这是一个队列!如果它可以重新排序条目,他们会称它为 ConcurrentBingoMachine、ConcurrentLottery、ConcurrentShoppingTrolley 或其他名称。生产者-消费者队列管道出现故障的唯一方法是存在多个消费者线程。
-
显然,有一个“ConcurrentBag”类,所以不是 ConcurrentBingoMachine :((
-
同意马丁的观点。也许您可以使用相关代码发布您的实际问题!
-
@MartinJames:感谢您对无序队列的命名建议。顺便说一句,您能否解释一下“生产者-消费者队列管道出现故障的唯一方法是如果有多个消费者线程。” ?
标签: c# .net multithreading thread-safety