Javaのマルチスレッドと並行性ボックス(最初の⑧)の深い理解 - の完全な理解:CAS

CASの実装原理

CASは、比較と交流することを意味し、コンペア・アンド・スワップの頭字語です。それは何のロック指向の実装では、古典的な楽観的ロックではないです。

、メモリアドレスV元の値A、新しい値Bに期待されている:CAS操作は、それが3つのオペランドが含まれている、非常に簡単です メモリアドレスはV Bで新しい値に更新された場合に第1比較値と等しいVメモリアドレスに期待される元の値は、それが等しくなります 操作が失敗した場合に併せてリサイクル、CASで使用する場合は、ループの実行を終了するか、特定の場所に到達します。リサイクルとこの操作は、また、スピンロックの実装として知られています。

CASの問題

1. ABAの問題

一つのスレッドが動作しているとき、第一のメモリアドレス値でのV Aの値はBに更新し、次にBの値は、値Aに更新されます 最後に、CAS判断は、更新操作が成功しなかったことをVメモリアドレスに変更されませんが、本質的に前に更新されました。これは、ABAの古典的な問題です。

ソリューション:

  • 刻印:
  • プラスバージョン番号:

2.大きなループオーバヘッド

これは、CASは楽観的ロックで、スレッドがより多くの場合は、強烈なリソースをつかむために、ヒット率、継続的なサイクルは、リソースを消費していきます。実現、あなたはサイクルの最大数を設定することができ、最大サイクル数は、自動的に無限ループを避けるため、リソースの所有権を放棄していません。

3.保証は唯一の共有変数を操作することができます

CASは、共有変数、低モノマーの効率を操作することができます。

おすすめ

転載: juejin.im/post/5e7f4cdf6fb9a03c2f4df95e