队列<t>线程安全:一位作家,一位读者</t>

时间:2013-07-02 08:16:28

标签: c# .net multithreading .net-4.0 queue

我有Queue<T> _q = new Queue<T>();

总是只有一个线程填充它:_q.Enqueue(msg);

总有一个线程消耗它:_q.Dequeue();

我想在两个线程中都无锁。表现很重要,但首先是安全。

我是否需要_q ConcurrentQueue<T>

UPD 这可能很重要: 在编写线程后,我不需要确定读取线程是否会立即成功地使项目出列。如果将采取一些false出列 - 那没关系。

3 个答案:

答案 0 :(得分:4)

  

我是否需要将_q作为ConcurrentQueue

是。队列不是线程安全的。

答案 1 :(得分:3)

在这里你可以找到一个无锁的队列:Lockfreie threadsichere Queue - 不要害怕网站是德语 - 代码应该说明一切。此外,Writing Lock-Free Code: A Corrected Queue

还有另一篇更深入的文章

答案 2 :(得分:0)

你也可以使用syncQueue = Queue.Synchronized(_q);,虽然它在内部使用锁。