同時機構の下層実現原理‐volatile,synchronized,CAS原子操作


volatile,synchronized,CAS原子操作定義と原理

  • Volatileの定義と実現原理
  • 定義:
  • 原理
  • synchronizedの定義と実現原理、ロックの記憶構造
  • 定義:
  • 原理:
  • CAS
  • 定義:
  • Volatileの定義と実現原理


    定義:

     java volatile , .
    

    げんり

    volatile  ?
    

    volatileで修飾された変数は、JITで生成されたアセンブリ言語で、この変数の書き込み操作にlock接頭辞の命令を加え、マルチコアプロセッサの下で2つのことを引き起こす.
  • キャッシュ行の変数のデータをメモリ
  • に書き込みます.
  • 前回の書き込みメモリの操作を保証し、他のCPUにメモリアドレスを変更するデータをキャッシュしたデータを無効にする
  • .
    以上の2ステップを要するのは、CPUが直接メモリを操作するのではなく、内部のキャッシュを操作しているため、内部のキャッシュが処理された後、いつメモリに戻るか分からないため、メモリをタイムリーに書き込み、可視性を保証する必要があるからです.その後、各プロセッサは、バス上で伝播したデータを嗅ぐことで、自分のキャッシュの値が期限切れであるかどうかを確認し、期限切れである場合は失効状態に設定し、次回この値を使用する必要がある場合は、メモリから内部キャッシュにロードする必要があります.

    synchronizedの定義と実現原理,ロックの記憶構造


    定義:

     , 
    

    原理:


    synchronizedによるロック同期の基礎としてjava内の任意のオブジェクトをロックとして表現するには、次の3つの形式があります.
  • 通常の同期方法:ロックは現在のインスタンスオブジェクト
  • である.
  • 静的同期方法:ロックは現在のクラスのClassオブジェクト
  • である.
  • 同期方法が速い:ロックはsynchronizedカッコに配置されたオブジェクト
  • である.
    JVMは、Monitorオブジェクトへのアクセスと終了に基づいて方法同期とコード同期を実現する、monitorrenterとmonitorexit命令を用いて、いずれのオブジェクトにも1つのMonitorが関連付けられていることを実現し、1つのMonitorが保持すると、そのオブジェクトはロック状態になる.モニタrenter命令が実行すると、パラメータはオブジェクトに対応するモニタの所有権を取得する.
    JAvaオブジェクトのオブジェクトヘッダにロックが格納されている構造で、最新のjavaではロックの重大度を4つに分けています.
  • ロックなし
  • 偏向ロック
      , , 
    
  • 軽量ロック
      CAS , , , CPU
    
  • ヘビー級ロック
      , CPU, , 
    
  • 以上の4つの状態は上昇しても下がることができなくて、効率のためです

    CAS


    定義:


    CAS(compare and swap)操作では、2つの値、古い値、新しい値を入力する必要があります.操作中に古い値が変化しているかどうかを比較し、変化がなければ新しい値を交換し、変化があれば交換しない
    java CAS 
    

    CASが原子操作を実現する三大問題:
  • ABA問題は、元の値がAで、後にBに変更し、Aに変更した場合、実際には変更が送信され、CASを使用すると
  • に変更がないことがわかりました.
  • サイクル時間が長く、オーバーヘッドが大きい
  • は、共有変数の原子操作
  • のみを保証する.