Happens-Before 一貫性
Java では、Happens-Before 関係により、異なるスレッドでのアクションが発生する順序が定義されます。アクションのセットは、そのセット内の読み取りアクションが論理的にその後または同時に発生する書き込みアクションを認識しない場合、前発生一貫性があります。
定義の解釈
この定義は次のように解釈されます:「... ... も ... でもない場合です。」:
どちらでもない.. . : hb(r, W(r))
Nor... : A には次のような書き込み w が存在します:
例: スレッドの実行
指定された例:
現実世界の状況
はい、読み取りから後で発生する書き込み (古い値) が見える状況は、実際のプログラミングでも存在する可能性があります。以下に例を示します。
1 つのスレッドが共有リソースにデータを書き込み、他のスレッドがそこから読み取るマルチスレッド アプリケーションを想像してください。適切な同期メカニズムがないと、書き込みスレッドが書き込みを完了する前に読み取りスレッドが実行される可能性があります。これにより、リーダー スレッドに古い値が表示される可能性があります。
そのような状況の防止:
揮発性フィールドにより、読み取りと書き込みが一貫した順序で行われ、すべてのスレッドが参照できるようになります。同じ値です。これは、揮発性読み取りによって CPU がメイン メモリにアクセスし、不整合を引き起こす可能性のあるキャッシュ メカニズムがバイパスされるためです。
以上がHappens-Before Consistency は、マルチスレッド Java アプリケーションでデータの一貫性をどのように保証しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。