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は、共有変数、低モノマーの効率を操作することができます。