CAS:CASメカニズムとは何ですか?
:CASの目的は、説明するためにアトミック操作を達成することで
、マルチスレッドプログラミング一般的であり、「アトミック操作(アトミックオペレーション)は同期は必要でありません、」。この操作一度開始は、任意の中間コンテキストスイッチ(別のスレッドへの[1]の変化をカット)することなく、最後まで実行された、スレッドスケジューリング機構の動作を中断されない、いわゆるアトミック操作を指します。これは、Baiduの百科事典の説明である
状態は、銀行振込・メカニズム、お金を控除のアカウントとの中間状態で中断されることはありません、お金の口座にもお金を集めるために必要であることを意味し、それが中断することはできません
マルチスレッドのJava原子で事業を共有変数を回避するための動作シナリオは期待を満たしていませんでした
危険なシナリオの例を参照してください。
マルチスレッド競争がアトミック操作を達成するために、各スレッドの動作状態が他のスレッドの影響によって影響されないと内部同期コードブロックの実行方法あれば、200未満であってもよいので、この結果は必ずしも、200カウントされません結果の大部分は200になります。
低原子は、java.util.concurrent.atomicパッケージのシリーズ
原子クラスは特にこの問題に対処するため、この最後の操作は、200です
達成共有変数揮発性の値を用いて原子クラス値。
コア原則は次のとおりです。三つの基本的なオペランドを使用してCASのメカニズム:Bの新しい値を変更するためのメモリアドレスV、旧Aの期待値、
古い値と比較して各アップデートは値メモリである必要があり、矛盾が失敗に更新されます、その後、メモリの使用の値を更新し続けて(非常に同時危険なCPUリソースで運用するスピンがひどく消耗されますがありました)
このような第二のスレッドなどによるスピンが97 98に初めから行われるように5は、その後、一貫性のない値と古い値を失敗する最初のメモリをインクリメント遅い応答にそれが実行されている最初のスレッドへの97回のラン2つのスレッドは98古い値の実行を開始しますので、98が回転起動に失敗し、そのために最終結果が交互に200をインクリメントされて達成するために97です。
图文并茂的讲解。
cas是乐观锁,synchronized 是悲观锁, 在大并发下synchronized 的使用要比cas好些