2017-10-26 1 views
2

'Volatile Rule'は、「同じフィールドの次のすべての読み取りの前に、揮発性フィールドへの書き込みが発生します」と言います。 これは、揮発性スレッドに書き込み、別のスレッドで別の揮発性メモリを読み取ると、 NOは、2つのアクション間の関係の前に発生します。volatileキーワードを使用して先起こり関係を確立するために同じvolatileフィールドを使用する必要があるのはなぜですか?

私の口はなぜ同じフィールドを使用するのですか?

+2

これはルールなので、 – shmosel

+0

1つの 'volatile'フィールドに書き込み、別のフィールドから読み込むと(' volatile'または '' volatile)、 '' happen-before ''の保証はありません。 –

+0

これ以外に何を言いますか?重要なのは、最新の変更を実際に関係するスレッドに表示させるスレッドを制限することです。 Jvmのデザイナーは、プログラム全体で各スレッドのビューを更新する必要がないようにしたいと考えています。 –

答えて

0

何を​​で覆われているために求めているので:はその後、同期メソッドを介して、同じオブジェクトの他のフィールドを読む前に、同期方法を通じてオブジェクトの任意のフィールドへの書き込みが発生します。

+2

'synchronized'は、* happen-before *が同じモニタをロックするスレッド間でのみ保証されるという意味で、' volatile'と同様に機能します。あなたは間違った区別をしています。 – shmosel

1

それはどのように動作するはずですか?私たちが望むのは、スレッド間で共有されるデータが一貫している必要があるからです。私たちがそれをしなければ、それはデータ競争につながるかもしれないので、同じ分野の関係の前に起こっていることは理にかなっています。そうじゃない?

関連する問題