關(guān)于該樂觀鎖靡砌,相信有很多人研究過酿愧,而且網(wǎng)上一搜挺狰,都是到編繪那段代碼戛然而止身隐,
http://www.tuicool.com/articles/v6fyIrr
千篇一律都是這樣廷区,仿佛大家都是拷貝的唯灵,就是不說那段匯編到底做了些什么贾铝。
從變量名稱我們可以發(fā)現(xiàn),匯編中從函數(shù)參數(shù)中傳入了三個(gè)參數(shù)
inline jintAtomic::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 ? 計(jì)數(shù)暫存器
?mov eax, compare_value ? ?積累暫存器
LOCK_IF_MP(mp)? ?
?cmpxchg dword ptr [edx], ecx??
}}
為了讀懂這段代碼到底做了些什么什特意學(xué)了下匯編:
第一步先判斷是否是多核并行埠帕,
如果是進(jìn)行同步加鎖 LOCK_IF_MP
進(jìn)入_asm{}
mov ?應(yīng)該就是傳送的意思
edx是什么呢:
http://blog.sina.com.cn/s/blog_59ca605c0100g3mx.html ?
http://www.cnblogs.com/qq78292959/archive/2012/07/20/2600865.html
直接給出連接
一般寄存器為AX,BX,CX,DX
AX:積累暫存器垢揩。BX:基底暫存器,CX:計(jì)數(shù)暫存器敛瓷,DX:資料暫存器
EAX叁巨、ECX、EDX呐籽、EBX:為ax,bx,cx,dx的延伸锋勺,各為32位元
回到那段代碼
http://blog.csdn.net/reggergdsg/article/details/51835184