???????Java??????????
???????????? ???????[ 2013/3/20 10:13:40 ] ????????
?????÷???????????????????state???????????java??compareAndSet()???????ü???CAS??JDK?????÷???????????£?????????????????????????????????????????????????????????????? volatile ????д????????塣
???????????????????????????????????????CAS?????????volatile????volatileд????????塣
????????????????????????????volatile????volatile??????????????????????????????????volatileд??volatileд?????????????????????????????????????ζ??????????volatile????volatileд????????壬???????????CAS??CAS????????????????????????
?????????????????????????intel x86???????У?CAS???????????volatile????volatileд???????????
??????????sun.misc.Unsafe???compareAndSwapInt()???????????
public final native boolean compareAndSwapInt(Object o?? long offset??
int expected??
int x);
??????????????????????????á?????????????openjdk?????ε????c++???????unsafe.cpp??atomic.cpp??atomicwindowsx86.inline.hpp?????????????????????openjdk??????λ???openjdk-7-fcs-src-b147-27jun2011openjdkhotspotsrcoscpuwindowsx86vm atomicwindowsx86.inline.hpp???????windows????????X86????????????????????intel x86????????????????Σ?
// 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)
cmpxchg dword ptr [edx]?? ecx
}
}
????????????????????????????????????????????????????cmpxchg??????lock?????????????????????????У??cmpxchg??????lock????lock cmpxchg????????????????????????????????У????lock?????????????????????????????????????????????lock?????????????Ч??????
????intel??????lock??????????£?
????1????????????-??-д?????????С???Pentium??Pentium??????????У?????lock???????????????????????????????????????????????????????檔?????????????????????????Pentium 4??Intel Xeon??P6???????????intel???????????????????????????????????????????????????????area of memory????lock??????????????????????????????б???????????????????????????е??????????????????????????????????????????????????У?cache line???У?????????????????и???????????????????????л??????????????????????????/д??????????????????????????????е???????????????????????????????cache locking???????????????????lock????????п???????????????????????????????????????????δ????????????????????
????2???????????????????????д?????????
????3????д???????е???????????μ?????С?
??????????2????3???????е????????Ч?????????????volatile????volatileд????????塣
???????????????Щ???????????????????????????JDK????CAS??????volatile????volatileд????????????
??????

???·???
??????????????????
2023/3/23 14:23:39???д?ò??????????
2023/3/22 16:17:39????????????????????Щ??
2022/6/14 16:14:27??????????????????????????
2021/10/18 15:37:44???????????????
2021/9/17 15:19:29???·???????·
2021/9/14 15:42:25?????????????
2021/5/28 17:25:47??????APP??????????
2021/5/8 17:01:11