原理剖析(第004編)CAS動作原理分析
2901 ワード
原理剖析(第004編)CAS動作原理分析
一、大まかに紹介する
二、原理分析
2.1 CASとは?
2.2 CAS原理
2.3 CASコアソース
三、CASの欠点
3.1、ABA問題
3.2、出費が多い
3.3、原子操作制約
四、まとめ
五、ダウンロードアドレス
https://gitee.com/ylimhhmily/SpringCloudTutorial.git
SpringCloudTutorial交流QQ群:235322432
SpringCloudTutorial交流微信群:微信コミュニケーション群QRコードピクチャーリンク
注目を歓迎して、あなたのはきっと私に対する最大の支持です!!!
一、大まかに紹介する
1、 , CAS AQS, , ;
2、 , Java ;
3、 CAS ;
二、原理分析
2.1 CASとは?
1、CAS,compare and swap , , , “ - - ” ;
2、CAS : (V)、 (A)、 (B);
V A , B, ;
2.2 CAS原理
1、CAS JNI C , C CPU ;
2、CAS CPU , cmpxchg ( Lock ) ;
2.3 CASコアソース
1、CAS :
// Adding a lock prefix to an instruction on MP machine
// VC++ doesn't like the lock prefix to be on a single line
// so we can't insert a label after the lock prefix.
// By emitting a lock prefix, we can define a label after it.
#define LOCK_IF_MP(mp) __asm cmp mp, 0 \
__asm je L0 \
__asm _emit 0xF0 \
__asm L0:
inline jint Atomic::cmpxchg (jint exchange_value, volatile jint* dest, jint compare_value) {
// alternative for InterlockedCompareExchange
int mp = os::is_MP();
__asm {
mov edx, dest
mov ecx, exchange_value
mov eax, compare_value
LOCK_IF_MP(mp) // , Lock ,Lock Volatile
cmpxchg dword ptr [edx], ecx //
}
}
2、 cmpxchg , lock , lock ;
3、 lock , Volatile , [ ( 001 )Volatile ];
三、CASの欠点
3.1、ABA問題
1、 , ABA ;
i i=5,A i++ ,B i-- ,C i=5 i ;
2、 C i , , AB i ;
3、 , C i , Java1.5 AtomicStampedReference ABA ;
4、AtomicStampedReference , ;
5、 AtomicMarkableReference ABA , ABA ;
boolean , true false , ABA , ABA ;
3.2、出費が多い
1、 CAS Java :
public final int getAndSetInt(Object var1, long var2, int var4) {
int var5;
do {
var5 = this.getIntVolatile(var1, var2);
} while(!this.compareAndSwapInt(var1, var2, var5, var4));
return var5;
}
2、 , CAS , , CPU ;
3.3、原子操作制約
1、 CAS ;
2、 ,CAS , , AtomicReference ;
四、まとめ
1、 CAS ;
2、 CAS ;
3、 CAS, , ABA 。
五、ダウンロードアドレス
https://gitee.com/ylimhhmily/SpringCloudTutorial.git
SpringCloudTutorial交流QQ群:235322432
SpringCloudTutorial交流微信群:微信コミュニケーション群QRコードピクチャーリンク
注目を歓迎して、あなたのはきっと私に対する最大の支持です!!!