CAS compareAndSwapInt匯編詳解

關于該樂觀鎖,相信有很多人研究過,而且網上一搜,都是到編繪那段代碼戛然而止,

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容