いくつかの配列があるとします。すべての項目は、最初はnull
配列への Thread1 書き込みです。Thread2 は、配列内のすべての項目が設定される (そして処理される) までブロックします。
私はそのようにしていました:私は別の配列を作成しましたAutoResetEvent
. Thread1 では配列項目を更新するたびSet
に対応する AutoResetEvent を呼び出し、Thread2 ではただWaitHandle.WaitAll(events);
しかし、今ではこれは効率的ではないと思います。おそらく1つのイベントを使用する必要があると思います。まだ更新されているアイテムの数をカウントできるため、最後の更新でイベントを発生させることができます。
これは単純化された例です。実際には少し難しいですが、おそらくもっと良いものを提案できますか?
またVolatile.Read
、Thread1で使用する必要がありますか? (私はダブルCPUマシンを持っています)。