4

私は持っていますQueue<T> _q = new Queue<T>();

それを設定するスレッドは常に 1 つだけです。_q.Enqueue(msg);

それを消費するスレッドは常に 1 つだけです。_q.Dequeue();

両方のスレッドでロックフリーになりたい。パフォーマンスは重要ですが、安全が第一です。

を作る必要があり_qますConcurrentQueue<T>か?

UPD これは重要です。書き込みスレッドがアイテムをエンキューした直後に、読み取りスレッドがアイテムを正常にデキューすることを確認する必要はありません。いくつかのfalseデキューが行われる場合 - それは問題ありません。

4

3 に答える 3

3

ここにロックフリーキューがあります: Lockfreie threadsichere キュー- サイトがドイツ語であることを恐れないでください - コードはそれ自体で語るべきです. さらに、 Writing Lock-Free Code: A Corrected Queueにはもう少し詳しい記事があります。

于 2013-07-02T08:22:18.980 に答える