2

CyclicBarrier または CountDownLatch が Synchronized キーワードを使用せずに続行できるようにする前に、Java が実行された書き込みのキャッシュを確実にフラッシュする方法はありますか?

4

1 に答える 1

4

APIですでに保証されていると思います。

http://download.oracle.com/javase/6/docs/api/java/util/concurrent/CyclicBarrier.html

メモリー一貫性効果: await() を呼び出す前のスレッド内のアクションは、バリア アクションの一部である事前発生アクションであり、バリア アクションは、他のスレッドの対応する await() から正常に返された後の事前発生アクションです

http://download.oracle.com/javase/6/docs/api/java/util/concurrent/package-summary.html#MemoryVisibility

あるスレッドによる書き込みの結果は、書き込み操作が読み取り操作の前に発生した場合にのみ、別のスレッドによる読み取りに表示されることが保証されます。... CyclicBarrier.await を呼び出すのアクションは、バリア アクションによって実行される事前発生アクション、およびバリア アクションによって実行されるアクションは、他のスレッドの対応する await から正常に返された後に発生します。


これの意味は

thread 1                  thread 2

write x1;                 write x2
barrier.await();          barrier.await();
read x2                   read x1

追加の同期は必要ありません。read x2の結果が表示されますwrite x2

于 2011-09-21T00:05:44.400 に答える