Queue
複数のスレッドでEnqueue()
のキューが機能する必要がある場合、C#で使用するデータ構造は1つのメインスレッドでDequeue()
にするだけです。マイスレッド構造は次のようになります。キューとスレッディング
- メインスレッド - 消費者
- サブスレッド1 - プロデューサー
- サブスレッド2 - プロデューサー
- サブThread3 - プロデューサー、私が持っている
サブスレッドとメインスレッドによって生成されたすべてのアイテムを保持する単一のQueue<T> queue
がqueue.Dequeue()
が空になるまで。私は、この目的のために私のメインスレッドで呼び出される次の関数を持っています。
public void ConsumeItems()
{
while (queue.Count > 0)
{
var item = queue.Dequeue();
...
}
}
メインスレッドは、各スレッドのループを通って一度この関数を呼び出すと、私は確信して私は、スレッドセーフなマナーでqueue
にアクセスしていますが、私はまた、可能な場合は、パフォーマンス上の理由からqueue
をロックしないようにしたいようにしたいです。
あなたは[system.collections.concurrent](https://msdn.microsoft.com/en-us/library/system.collections.concurrent(V = vs.110)から何かをしたいだろうとします。 aspx)。 – Equalsk
私は明示的なキュー管理を避け、代わりにTPL Dataflowライブラリを見ていきます。 –