?????÷???????????????????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д????????????