我有一个WorkerThread
来处理队列中的元素,并且创建内容的几个MiningThread
需要由WorkerThread
完成。
总结:一个线程Dequeues和几个Enqueue。
我是否需要使用msdn中提出的同步模式,或者我在此特定情况下是线程安全的?
从msdn一个简单的同步访问模式
Queue myCollection = new Queue();
lock(myCollection.SyncRoot)
{
foreach (object item in myCollection)
{
// Insert your code here.
}
}
答案 0 :(得分:6)
是的,您需要同步。
有一个.NET4队列,您不需要同步,称为“ConcurrentQueue”: http://msdn.microsoft.com/en-us/library/dd267265.aspx
但你必须迁移到.NET4,直到那时,你仍然坚持自己进行同步
<强>更新强> 对于您的特定模式,.NET4中甚至还有一个更专业的类,BlockingCollection包含Producer / Consumer模式: http://msdn.microsoft.com/en-us/library/dd267312.aspx
仍然是.NET4强悍...:)
答案 1 :(得分:1)
Queue
并不是线程安全的,所以你不能在多线程应用程序中使用它。您可以使用SyncRoot
属性或Synchronized方法来实现同步。