關于該樂觀鎖,相信有很多人研究過,而且網上一搜,都是到編繪那段代碼戛然而止,
http://www.tuicool.com/articles/v6fyIrr
千篇一律都是這樣,仿佛大家都是拷貝的,就是不說那段匯編到底做了些什么。
從變量名稱我們可以發現,匯編中從函數參數中傳入了三個參數
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 ? 計數暫存器
?mov eax, compare_value ? ?積累暫存器
LOCK_IF_MP(mp)? ?
?cmpxchg dword ptr [edx], ecx??
}}
為了讀懂這段代碼到底做了些什么什特意學了下匯編:
第一步先判斷是否是多核并行,
如果是進行同步加鎖 LOCK_IF_MP
進入_asm{}
mov ?應該就是傳送的意思
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:計數暫存器,DX:資料暫存器
EAX、ECX、EDX、EBX:為ax,bx,cx,dx的延伸,各為32位元
回到那段代碼
http://blog.csdn.net/reggergdsg/article/details/51835184