Javaのマルチスレッド - メモリモデルの観点から、原子の問題と可視性の問題を理解します

まず、オペレーティングシステムの観点から、プログラム、プロセス、スレッドを理解します

1.1強くLinuxプログラムのメモリ使用量、プロセス、スレッドを説明し、2件のブログ記事をお勧めします

プログラムからのプロセスへのLinux:www.cnblogs.com/vamei/archi ...

Linuxの同時実行性と同期:www.cnblogs.com/vamei/archi ...

1.2図は、メモリ内のJavaマルチスレッドに分布しています。我々は2つの記事の上を歩くとうまくので直接紹介を書くことをお勧めします。

ヒープ(ヒープ)は、すべての動的変数を格納するためのプロセスを共有内のスレッドであり、それぞれがスレッドを作成するスレッドがスタックに割り当てられます、スレッドのスタックは、固有のスレッドで、スレッドは、(他のスレッドのスタックにアクセスすることはできませんスタック上に保存されたローカル変数)。

1.3以下の図は、格納位置におけるJavaヒープ及びスタックオブジェクトを示します

第二に、マルチスレッドとメモリの問題の不可分の可視性の問題

2.1のJavaメモリモデルとハードウェアモデル

2.2原子視認性の問題および問題

         メモリの可視性の問題 メモリ・モデルとハードウェアモデルは、各CPUは、自身のレジスタ(CPUレジスタ)を有していることを示している2.1から、キャッシュ(CPUキャッシュMemmory)、実行ハードウェアスレッドは、CPU、メインメモリのデータのスレッド動作でありますメインメモリから始まるデータを読み取るとき、CPUは計算が、操作の終了後に、他のスレッドが下降変化データを見ることができないように、メインメモリ(RAMメインメモリ)に格納されたデータを取らないことが可能です視界はメモリの問題につながっています。
         不可分の問題 読み:図競合状態に示すように、左右の操作数のスレッドが数+ 1、この操作三つのステップで、カウント変数が共有変数で、上行きますカウント値→数+ 1つの→数保存。1のカウント値を読んだ後、糸を左、カウント+ 1市をやっている右のスレッドカウント値を読んでも、右のスレッド数+ 1、1 + 1が、またときに、2つように作られた、1のままスレッドは、3つのステップで行われている場合は、2を数える原子問題の導入となるよう、3ではありません。このステップは、方法で(すなわち、三つのステップではなく、他の操作の動作中に)、そのような操作も呼ばれる3個の原子行うべき 複合操作を

おすすめ

転載: juejin.im/post/5d7760ea5188250a9858240f