CAS compareAndSwapInt汇编详解

2017-06-23  本文已影响0人  snail_knight

关于该乐观锁,相信有很多人研究过,而且网上一搜,都是到编绘那段代码戛然而止,

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

上一篇下一篇

猜你喜欢

热点阅读