English 中文(简体)
简单的 Enqueue/ dequeue 是否需要 Quue. SyncRoot 来横穿线索?
原标题:Is Queue.SyncRoot required for simple Enqueue/Dequeue across threads?

我有一个 WorkerThread ,它可以对队列中的元素做一项工作,还有几个 MiningThread ,它们创造的东西需要由 WorkerThread 完成。

总而言之:一条线和几条线。

我是否需要使用 msdn 中提议的同步模式, 或者在这种特定情况下, 我是否处于线条安全状态?

http://msdn.microsoft.com/ en- us/library/ system. recollects.queue.syncroot.aspx" rel = "nofollow" msdn 一个简单的同步访问模式

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

是的,你需要同步。

There is a .NET4 queue where you would not need to sync, called "ConcurrentQueue": http://msdn.microsoft.com/en-us/library/dd267265.aspx

但你必须迁移到.NET4,直到那时,你一直坚持自己同步

Update: For your specific pattern, there is even a more specialised class available in .NET4, the BlockingCollection which embraces the Producer/Consumer pattern: http://msdn.microsoft.com/en-us/library/dd267312.aspx

.NET4依然坚韧... :)

问题回答

ueue 并不安全, 因此您不能在多行应用程序中使用它。 您可以使用 SyncRooot 属性或 < a href=> http://msdn. microsoft. com/ en- us/library/ system. recognize. queue. synchronized.aspx" rel=“ nofol” > Synchronized 方法来实施同步 。





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

热门标签