私は2つのスレッドとQueue<string>
を持っています。最初のスレッドはループ内でいくつかのパフォーマンス上重要な作業を行い、Queue
が空でない場合は文字列を取得して、それぞれの反復をQueue<string>
でチェックします。1つの場所でロックする方法
今度はへの2番目のスレッドが必要ですQueue
に文字列を入れてください。第1のスレッドがQueue
で何もしていないときに、第2のスレッドだけがを待つべきです。私はlock
を使用したくないので、最終的にはそれを遅くする最初のスレッドをブロックすることになるでしょう。
どうすればいいですか?私は、lockステートメントと私の第二のスレッドでのみEnqueue()
を包囲しようとしたが、ReSharperのはことを私に警告している:
フィールドが時々同期ブロックの内部で使用し、時々同期せずに使用されています。
だから私は正しいことをしていないと思います。
これがあなたの必要性に合っている場合に備えて、そこに投げる。 ['ConcurrentQueue'](https://msdn.microsoft.com/en-us/library/dd267265(v=vs.110).aspx)を使用できませんか? –
ConcurrentQueueのようなサウンドは役に立ちますhttps://msdn.microsoft.com/en-us/library/dd267265(v=vs.110).aspx –
YuvShap
[Jon Skeetの回答](http://stackoverflow.com/ A/39602754/1771817)を私が最近尋ねた同様の質問に付け加えました。キューを操作するたびにロックを入力すると、スレッドの安全性/メモリの可視性が保証されます。 – adv12