C# 跨线程简单入/出队列是否需要Queue.SyncRoot?

C# 跨线程简单入/出队列是否需要Queue.SyncRoot?,c#,.net-3.5,thread-safety,queue,C#,.net 3.5,Thread Safety,Queue,我有一个WorkerThread对队列中的元素执行作业,还有几个miningread需要由WorkerThread来创建内容 综上所述:一个线程出列,几个线程入列 我是否需要使用msdn中建议的同步模式,或者在这个特定场景中我是线程安全的 从简单的同步访问模式 Queue myCollection = new Queue(); lock(myCollection.SyncRoot) { foreach (object item in myCollection) {

我有一个
WorkerThread
对队列中的元素执行作业,还有几个
miningread
需要由
WorkerThread
来创建内容

综上所述:一个线程出列,几个线程入列

我是否需要使用msdn中建议的同步模式,或者在这个特定场景中我是线程安全的

从简单的同步访问模式

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

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

是的,您需要同步

有一个名为“ConcurrentQueue”的.NET4队列,您不需要在其中进行同步:

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

更新: 对于您的特定模式,在.NET4中甚至有一个更专业的类可用,它包含生产者/消费者模式:


尽管如此。NET4很难…:)

是的,您确实需要同步。