CAS compareAndSwapInt匯編詳解

關(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容