ホームページ  >  記事  >  Java  >  Java 言語仕様のコンテキストでは、「一貫性の前に発生する」とは何を意味しますか?

Java 言語仕様のコンテキストでは、「一貫性の前に発生する」とは何を意味しますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-31 12:28:02392ブラウズ

What does

Happens-Before Consistency を理解する

Java 言語仕様 (JLS) の第 17 章では、「Happens-Before Consistency」は次のように定義されています。

「一連のアクション A は、A のすべての読み取り r について発生前一貫性があり、W(r) が r によって認識される書き込みアクションである場合、hb(r 、W(r)) または、w.v = r.v および hb(W(r), w) および hb(w, r) となる書き込み w が A に存在するとします。

この定義は簡略化できます。一連のアクションが一致するためには、後で発生する書き込みを読み取りが行われるべきではなく、書き込みの後に前の値を参照する読み取りが続く必要があります。

ご質問

  • 最初の 2 つの質問:

    • はい、定義の理解は正しいです。
    • 「w.v = r.v」は、書き込みアクション w によって書き込まれた値が、読み取りアクション r によって読み取られた値と同じであることを意味します。
  • 3 番目の質問:

    実行順序のアクションの左側にある数字は、アクションが実行された順序を表します。

  • 4 番目の質問:

    はい、A と B は揮発性フィールドではないため、r2 と r1 の両方が 0 の最初の書き込みを見たという理解は正しいです。不揮発性フィールドはレジスタに格納される可能性があり、一時的な不一致が生じる可能性があります。

  • 5 番目と 6 番目の質問:

    説明されている状況2 番目の実行順序では、読み取りが後で行われる書き込みを参照しますが、これは実際のマルチスレッド シナリオで発生する可能性があります。例としては次のようなものが考えられます。

    • スレッド A は共有変数 X に書き込みます。
    • スレッド B は後の時点で X の値を読み取りますが、キャッシュ コヒーレンスの遅延により、古い値が表示されます。

    このような不一致を防ぐために、揮発性フィールドを使用して、読み取りと書き込みが以前に発生した一貫した方法で実行されるようにすることができます。

以上がJava 言語仕様のコンテキストでは、「一貫性の前に発生する」とは何を意味しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。