2012-02-29 41 views
0

ConcurrentQueueインスタンスとそれに同時にアクセスする2つのスレッドがあります。 1つのスレッドはアイテムをエンキューし続けます(100マイクロ秒で少数のアイテムをエンキューする可能性があります)。また、アイテムごとにTryDequeueスレッドを処理し、何らかの処理を行います。この場合、いずれかの項目のエンキュー後の処理スレッドをシグナリングするManualResetEvent(これは非常にこの問題に関連していない)ConcurrentQueueのエンキューとTryDequeue

があり、ConcurrentQueueに誤った順序でアイテムを追加することの可能性があります。スレッドセーフであることはわかっていますが、エンキュー時とデキュー時の項目の順序がかなり速くなるかどうかを確認したいだけです。

+0

'アイテムエンキュー後に処理スレッドに信号を送るManualResetEventがあります' :( –

+4

これはキューです!エントリを並べ替えることができれば、ConcurrentBingoMachine、ConcurrentLottery、ConcurrentShoppingTrolleyなどと呼ばれます。 –

+0

A ConcrentBingoMachine:(( –

答えて

8

商品が故障する可能性はまったくありません。

まず、定義によるキューは、FIFOの順序を強制します。要素を一方の端に置き、もう一方の端で取り出します。これは単一生産者 - 単一消費者モデルによって行われるため、絶対に安全です。

+0

1 FIFOいるキューの –

+0

は、@。。チューダー:+1おかげ – ABCD

1

キューです!エントリを並べ替えることができれば、ConcurrentBagなどと呼ばれるはずです。プロデューサ - コンシューマキューパイプラインで順序が乱れる唯一の方法は、複数のコンシューマスレッドがある場合です。

+1

私はConcurrentShoppingTrollyが良い名前だと思います! – cost

関連する問題