私が安全にスレッドする方法を把握しようとしていると、パフォーマンスが賢明な問題にConcurrentQueueC#はConcurrentQueue
私の現在のソリューションにTryDequeueを元に戻すにTryDequeueを元に戻すことは次のとおりです。
lock(_queue) {
_queue = new ConcurrentQueue<IItem>(_queue.Reverse());
_queue.Enqueue(item);
_queue = new ConcurrentQueue<IItem>(_queue.Reverse());
}
しかし、これを行うにはこれが最善の方法であるかどうかは分かりません。なぜなら、手動でロックしているからです。しかし、このプロセス中にキューが別のスレッドで変更されないようにする必要があります。
私はTryPeekをやって、返された項目をチェックし、条件を満たすとTryDequeueを実行し、失敗したらもう一度チェックを行うという理由があります2回目はロールバックをしたい。これは理にかなっていますか?
これはX-Y問題のように聞こえます。すべての可能性が高い、あなたは仕事のために間違ったツールを使用している。 – xxbbcc
@TimSchmelter例のようにオブジェクトを完全に再構築しても? –
実際には、ロックされている参照を置き換えているため、 'lock'は効果がありません。 –