CASの概要

A:CAS(比較交換)であり、比較および交換は、多くの場合、同時アルゴリズムを達成するために使用される技術である、Javaとの契約の多くのクラスは、CAS技術を使用しています。
CASは、英語の単語コンペア・アンド・スワップの略称であり、中国の意味は次のとおりです。比較すると、交換してください。、メモリアドレスV、旧Aの期待値、目標B.更新されようとしている:CASは、3つのオペランドが必要です
CAS命令が実行されると、それ以外の場合は何もしない、場合にのみ、V Aの期待値の値のメモリアドレスがBに変更Vメモリアドレスの値に等しい場合。全体の操作はアトミック操作で比較し、交換してください。
CASは、最初のラウンドで、無限ループを介しRuoguoサイクルのデータを取得することで、スレッドは、アドレス値内部に入っ実行する次の可能な機会にスピンサイクルにBスレッドは、スレッドのニーズに変更されます。
 
 
2:CASの欠点:
1:長いサイクル時間多くのオーバーヘッド:
私たちは、CASが失敗した場合、実行の際にgetAndAddInt方法は、それを試してみなければならないことがわかります。長い時間のためにCASが失敗した場合には、CPUのオーバーヘッドの多くを与えるかもしれません。
 
2:アトミック操作は、共有変数を保証することができます。
共有変数に対して操作を実行するとき、私たちはアトミック操作を保証するために、CASサイクル・アプローチを使用することができますが、サイクルCASを操作する複数の共有変数がアトミック動作を保証できない場合に、今回はアトミック性を確保するためにロックを使用することができます。
 
 
3:ABAの問題:
メモリアドレスVの値が準備Aまだ割り当て時に、その値に初期Aの読み取り、および小切手の場合、我々は値がまだ他のスレッドに変更されていないことを言うことができますか?
この期間中にその値がBに変更されていた、と後で戻ってAに変更された場合、CAS操作が誤って、それが変更されたことがないと信じています。この脆弱性は、「ABA」問題CAS操作と呼ばれています。Javaと契約、この問題を解決するために、
後CASの正確さを保証するために変数の値によって制御することができるクラス「AtomicStampedReference」を参照して、マークされた原子を提供します。
そのため、従来の相互排他の同期を使用し、必要がABAの問題に対処する場合は、「ABA」問題は、同時妥当性をプログラムに影響を与えることができるかどうかを慎重に検討するためにCASを使用する前に、原子クラスよりも効率的かもしれません。
 
3:CASは、多くのクラスがあり、楽観的ロックで同時実行の問題を解決するために、以下の原子JUCを確保することです。主な用途カテゴリーは以下のとおりです。ロック、のAtomicIntegerなど
 
 

おすすめ

転載: www.cnblogs.com/jelly12345/p/11938423.html