首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跨线程的简单入队/出队是否需要Queue.SyncRoot?

跨线程的简单入队/出队是否需要Queue.SyncRoot?
EN

Stack Overflow用户
提问于 2012-05-22 17:40:32
回答 2查看 964关注 0票数 3

我有一个WorkerThread来处理队列中的元素,还有几个MiningThread来创建需要由WorkerThread来完成的东西。

总而言之:一个线程出列和几个入队。

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

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

代码语言:javascript
复制
Queue myCollection = new Queue();
lock(myCollection.SyncRoot)
{
    foreach (object item in myCollection)
    {
        // Insert your code here.
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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 ..。:)

票数 6
EN

Stack Overflow用户

发布于 2012-05-22 17:49:23

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10699471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档