是否需要Queue.SyncRoot才能跨线程进行简单的Enqueue/Dequeue?

Ody*_*dys 3 c# queue thread-safety .net-3.5

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

总结:一个线程Dequeues和几个Enqueue.

我是否需要使用msdn中提出的同步模式,或者在此特定方案中我是线程安全的?

msdn一个简单的同步访问模式

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

Mic*_*elZ 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很难...... :)