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