3

我有一个WorkerThread在队列中的元素上做的工作和几个MiningThread创建东西的 s 需要由WorkerThread.

总结一下:一个线程Dequeues和几个Enqueue。

我是否需要使用 msdn 中提出的同步模式,或者在这种特定情况下我是线程安全的?

来自msdn的简单同步访问模式

Queue myCollection = new Queue();
lock(myCollection.SyncRoot)
{
    foreach (object item in myCollection)
    {
        // Insert your code here.
    }
}
4

2 回答 2

6

是的,您需要同步。

有一个不需要同步的 .NET4 队列,称为“ConcurrentQueue”:http: //msdn.microsoft.com/en-us/library/dd267265.aspx

但是您必须迁移到 .NET4,在此之前,您只能自己进行同步

更新: 对于您的特定模式,.NET4 中甚至还有一个更专业的类,即包含生产者/消费者模式的 BlockingCollection:http: //msdn.microsoft.com/en-us/library/dd267312.aspx

.NET4 仍然很艰难... :)

于 2012-05-22T09:52:07.750 回答
1

Queue并不是说是线程安全的,所以你不能只在多线程应用程序中使用它。您可以使用SyncRoot属性或Synchronized方法来实现同步。

于 2012-05-22T09:49:22.763 回答