並行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