2012-05-22 30 views
3

我有一个WorkerThread,在队列中的元素和MiningThread s创建的东西需要由WorkerThread完成工作。Queue.SyncRoot是否需要跨线程简单入队/出队?

总结:一个线程出队和几个入队。

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

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

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

回答

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艰难... :)

+0

是的你需要同步。 –

1

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