C# 跨线程简单入/出队列是否需要Queue.SyncRoot?
我有一个C# 跨线程简单入/出队列是否需要Queue.SyncRoot?,c#,.net-3.5,thread-safety,queue,C#,.net 3.5,Thread Safety,Queue,我有一个WorkerThread对队列中的元素执行作业,还有几个miningread需要由WorkerThread来创建内容 综上所述:一个线程出列,几个线程入列 我是否需要使用msdn中建议的同步模式,或者在这个特定场景中我是线程安全的 从简单的同步访问模式 Queue myCollection = new Queue(); lock(myCollection.SyncRoot) { foreach (object item in myCollection) {
WorkerThread
对队列中的元素执行作业,还有几个miningread
需要由WorkerThread
来创建内容
综上所述:一个线程出列,几个线程入列
我是否需要使用msdn中建议的同步模式,或者在这个特定场景中我是线程安全的
从简单的同步访问模式
Queue myCollection = new Queue();
lock(myCollection.SyncRoot)
{
foreach (object item in myCollection)
{
// Insert your code here.
}
}
Queue
并不是线程安全的,所以不能只在多线程应用程序中使用它。您可以使用SyncRoot
属性或方法来实现同步。是的,您需要同步
有一个名为“ConcurrentQueue”的.NET4队列,您不需要在其中进行同步:
但您必须迁移到.NET4,在此之前,您必须自己进行同步
更新:
对于您的特定模式,在.NET4中甚至有一个更专业的类可用,它包含生产者/消费者模式:
尽管如此。NET4很难…:) 是的,您确实需要同步。