プログラムを実行する際、プロセッサやコンパイラはパフォーマンスを向上させるために命令の順序を変更することがよくありますが、自由に順序を変更することはできません。次の 2 つの条件を満たす必要があります。単一命令 スレッド環境ではプログラムの実行結果を変更することはできません。 2. データの依存関係がある場合、並べ替えは許可されません。LZ の以前のブログを読んだことがある方なら、実際にはこれら 2 つの点が 1 つの要因であることがわかります。ポイント: 前発生の原則では推測できません。はい、JMM では任意の順序付けが可能です。 as-if-serial セマンティクス as-if-serial セマンティクスは、最適化のためにすべての操作を並べ替えることができることを意味しますが、並べ替え後の実行結果は変更できないことを確認する必要があり、コンパイラ、ランタイム、プロセッサのすべてが as-if- に準拠する必要があります。シリアルセマンティクス。 as-if-serial はシングルスレッド環境のみを保証し、マルチスレッド環境では無効であることに注意してください。簡単な例を使って説明します: int a = 1; プログラムを実行するとき、プロセッサとコンパイラはパフォーマンスを向上させるために命令を並べ替えることがよくありますが、それらを自由に並べ替えることはできません。以下の 2 つの条件を満たす必要があります: 1. シングルスレッドでプログラムの実行結果を変更できない環境であること。 2. データの依存関係がある場合は並べ替えが許可されていないこと。実際、これら 2 つの点は 1 つの点に起因すると考えられます。JMM では任意の順序付けが許可されているため、事前発生の原則では推定できません。 as-if-serial semantics as-if-se
2. 【Dead Java Concurrency】-----Java メモリ モデルは前に発生します
はじめに: このブログ内([Fuck Java Concurrency] - volatile の実装原理の詳細な分析) LZ は、スレッドのローカル メモリとメイン メモリの存在と並べ替えが原因で、マルチスレッド環境では可視性の問題が発生すると述べました。それでは、同期とロックを正しく使用すると、スレッド A はスレッド B から見える変数をいつ変更するのでしょうか?スレッドによって変更された変数が他のスレッドに表示されるかどうかをすべてのシナリオで規定することはできませんが、このルールは JDK 5 以降、ha
3 を使用します。同期アルゴリズムの実践 (3) - 最新結果プロバイダー
はじめに: この記事を送信してくれた trytocatch に感謝します。 はじめに この記事を読む前に、読者は事前発生についてよく理解し、ノンブロッキング同期のいくつかの基本概念を理解する必要があります。この記事は主に、前発生ルールの柔軟な適用、問題を解決するためのヒント、および問題の分析方法に焦点を当てています。 背景の紹介 本来の要件は次のとおりです: 私は定期的な置換ツールを作成していました
Java メモリ モデルはセマンティック順序の問題の前に発生します以上がハプニングビフォアについての詳しい紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。