我有一个WorkerThread来处理队列中的元素,还有几个MiningThread来创建需要由WorkerThread来完成的东西。
总而言之:一个线程出列和几个入队。
在这个特定场景中,我是否需要使用msdn中提出的同步模式,或者我是线程安全的?
来自msdn的一个简单的同步访问模式
Queue myCollection = new Queue();
lock(myCollection.SyncRoot)
{
foreach (object item in myCollection)
{
// Insert your code here.
}
}发布于 2012-05-22 17:52:08
是的,您需要同步。
有一个不需要同步的.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-22 17:49:23
据说Queue不是线程安全的,所以您不能只在多线程应用程序中使用它。可以使用SyncRoot属性或Synchronized方法来实现同步。
https://stackoverflow.com/questions/10699471
复制相似问题