メカニズム、CASアルゴリズムのバージョン番号は何ですか?

1.機構のバージョン番号

典型的にはプラスのデータテーブルのバージョン番号でデータベースversion発現データが変更されたときのフィールド、時間データの数は、バージョン値に1を加え、修正されます。データの読み取り中に更新を送信するときだけ更新は、現在のデータベース内のバージョンと等しい値であるときにバージョンを読み取る、または再試行する場合、データ値を更新するスレッドAは、バージョン値を読み取るする場合更新が成功するまで更新。

2. CASアルゴリズム

交換(比較およびスワップ)と比較して、それはまた呼ばれる、ブロックされたスレッドが存在しない場合に変数を同期されるロック、ことなく、複数のスレッド間で変数の同期を達成ロックフリーアルゴリズムであります同期ノンブロッキング(非ブロッキング同期)。メモリ値Vを読み書きする必要がある、比較Aの値は、提案された新しい書かれた値B.:CASアルゴリズムは、3つのオペランドを必要とします その値は、V Aに等しい場合にのみ、CASがアトミック新しい値V Bの値で更新された場合、それは任意の操作を実行しないであろう(およびスワップ操作が原子です)。自己回転動作通常の状況下で、すなわち連続的に再試行します。

CASアルゴリズムの欠点:

1. ABAの問題

変数Vは、初期の読み取りがAの値であり、そしてそれはまだ値Aで調製時の割り当てをチェックする場合なら、私たちは、その値がまだ別のスレッドが改訂されていない説明することができますか?その時に、その値が異なる値に変更される可能性があるため明らかに、その後、CAS操作は、それは、「ABA」CAS操作として知られている問題を変更することはなかったと思うだろうことを、Aに戻って変更されたではありません問題。

2.長いサイクルは、大きな時間を要します

長い時間のために成功していない場合は、サイクルCASので(それが成功するまでつまり、サイクルが失敗し、実行されている)、非常に大規模な実行オーバーヘッドのCPUをもたらすでしょう。JVMは処理挙げサポートできるかどうかpauseの指示を、その後、いくつかの効率改善が存在するであろう。pauseコマンドは、第1の命令実行パイプライン(パイプライン)を遅らせることができる2つの効果を有し、CPUが実行するためにあまりにも多くのリソースを消費しないように、遅延時間は、いくつかのプロセッサ時間に遅延がゼロで、実装依存です。それは、CPUのパイプラインによって引き起こされるので、メモリ(メモリ順序違反)の衝突のサイクルを開始するために回避することができる第二時間は、CPUの効率を向上させるために、(CPUのパイプラインフラッシュ)をクリアします。

3.アトミック操作は、共有変数を保証することができます

唯一の操作は無効とCAS間で共有変数の複数を含み、単一の共有変数のための有効なCAS。しかし、提供さJDK1.5開始、AtomicReferenceオブジェクト間のアトミック参照を確保するためには、あなたが行動CAS操作でオブジェクトに複数の変数を置くことができます。したがって、我々は、ロックまたは操作するための共有変数に結合AtomicReference共有変数の複数を使用することができます。アダプティブスピンソリューションは、「不確実性の競合時間をロック」する問題であり、目標は、スレッド切り替えのコストを削減することです。

おすすめ

転載: juejin.im/post/5d16d1d1f265da1b827ab05f