1

いくつかの配列があるとします。すべての項目は、最初はnull 配列への Thread1 書き込みです。Thread2 は、配列内のすべての項目が設定される (そして処理される) までブロックします。

私はそのようにしていました:私は別の配列を作成しましたAutoResetEvent. Thread1 では配列項目を更新するたびSetに対応する AutoResetEvent を呼び出し、Thread2 ではただWaitHandle.WaitAll(events);

しかし、今ではこれは効率的ではないと思います。おそらく1つのイベントを使用する必要があると思います。まだ更新されているアイテムの数をカウントできるため、最後の更新でイベントを発生させることができます。

これは単純化された例です。実際には少し難しいですが、おそらくもっと良いものを提案できますか?

またVolatile.Read、Thread1で使用する必要がありますか? (私はダブルCPUマシンを持っています)。

4

1 に答える 1

0

スレッド セーフな方法で項目を追加できるように、 BlockingCollectionを調べてみませんか?

スレッドセーフな ObserveableCollectionを使用して通知を取得することもできます。

于 2012-11-21T12:12:07.897 に答える