一貫性の前に起こる: 深い理解
質問 1: 定義の理解
happens-before-一貫性の与えられた定義は、一連のアクション A について、 A の読み取りアクション r が書き込みアクション W(r) を参照すると、hb(r, W(r)) であること、または w.v = r.v および hb(W(r) となる書き込み w が A に存在することはあり得ません。 )、w)、および hb(w, r)。 「…、…でも…でもない場合です」という理解は正しくありません。
質問 2: "w.v = r.v" の意味
"w.v = r.v" は、読み取りアクション r (r.v で表される) の値が書き込みアクション w (によって表される) の値と等しいことを示します。 w.v).
質問 3: 実行順序の左の数字の意味
実行順序の左の数字は、各スレッド内のアクションの順序を表します。たとえば、最初の実行順序では、「1: B = 1」は、スレッド 1 の最初のアクションが変数 B への書き込みであることを示します。
質問 4: 不揮発性変数の可視性
A と B は揮発性フィールドではないため、r2 と r1 の両方が初期書き込み値 0 を参照できるという理解は正しいです。不揮発性変数はレジスタに格納されるため、長期間にわたって他のスレッドから見えなくなる可能性があります。
質問 5: 2 番目の実行順序での整合性が発生する前に発生します
2 番目の実行順序は確かに、happens-before の一貫性があります。読み取り r2 と r1 はそれぞれ A と B への書き込みの後に発生し、事前発生関係に違反する介入アクションはありません。
質問 6: 読み取り後-を伴う実際の状況Write
実際のアプリケーションでは、読み取り後書き込みの状況がさまざまなシナリオで発生する可能性があります。たとえば、1 つのスレッドが共有オブジェクトを変更し、別のスレッドが同期せずに同じオブジェクトを読み取るマルチスレッド アプリケーションを考えてみましょう。揮発性変数や同期などの適切なメカニズムがないと、読み取りスレッドで古い値が表示される可能性があります。
以上がすべての実行命令で Happens-Before の一貫性が保証されていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。