【发布时间】:2012-11-11 15:40:55
【问题描述】:
在尝试创建并发 Socket 操作时,我创建了以下代码:
ConcurrentQueue<byte[]> messageQueue;
ManualResetEvent resetEvent;
Thread outThread; // -> new Thread(BeginSending);
public void BeginSending() // invoked by outThread
{
while (true)
{
resetEvent.WaitOne();
while (messageQueue.Count > 0)
{
byte[] msg;
messageQueue.TryDequeue(out msg);
// send msg via socket
}
resetEvent.Reset();
}
}
public void QueueMessage(byte[] msg) // invoked by the main thread
{
messageQueue.Enqueue(msg);
resetEvent.Set();
}
向ConcurrentQueue 添加项目而另一个线程正在对其进行迭代/出队是一件危险的事情吗?
据我了解,许多同步集合只是具有单独的同步方法,但concurrentQueue 和类似集合也是如此吗?
(ConcurrentBag、ConcurrentDictionary、ConcurrentStack)
【问题讨论】:
标签: c# .net multithreading .net-4.0 concurrency