2016-09-29 11 views
0

私は2つのスレッドとQueue<string>を持っています。最初のスレッドはループ内でいくつかのパフォーマンス上重要な作業を行い、Queueが空でない場合は文字列を取得して、それぞれの反復をQueue<string>でチェックします。1つの場所でロックする方法

今度はへの2番目のスレッドが必要ですQueueに文字列を入れてください。第1のスレッドがQueueで何もしていないときに、第2のスレッドだけを待つべきです。私はlockを使用したくないので、最終的にはそれを遅くする最初のスレッドをブロックすることになるでしょう。

どうすればいいですか?私は、lockステートメントと私の第二のスレッドでのみEnqueue()を包囲しようとしたが、ReSharperのはことを私に警告している:

フィールドが時々同期ブロックの内部で使用し、時々同期せずに使用されています。

だから私は正しいことをしていないと思います。

+1

これがあなたの必要性に合っている場合に備えて、そこに投げる。 ['ConcurrentQueue '](https://msdn.microsoft.com/en-us/library/dd267265(v=vs.110).aspx)を使用できませんか? –

+0

ConcurrentQueueのようなサウンドは役に立ちますhttps://msdn.microsoft.com/en-us/library/dd267265(v=vs.110).aspx – YuvShap

+0

[Jon Skeetの回答](http://stackoverflow.com/ A/39602754/1771817)を私が最近尋ねた同様の質問に付け加えました。キューを操作するたびにロックを入力すると、スレッドの安全性/メモリの可視性が保証されます。 – adv12

答えて

関連する問題