关于原子锁的理解

这几天研究了一下原子锁函数。

 


以下为加一原子锁函数声明:

WINBASEAPI
LONG
WINAPI
InterlockedIncrement (
    __inout LONG volatile *lpAddend
    );

以下为函数反汇编代码:
7C809776  mov         ecx,dword ptr [esp+4]
7C80977A  mov         eax,1
7C80977F  lock xadd   dword ptr [ecx],eax
7C809783  inc         eax  
7C809784  ret         4

一直想不明白为什么要inc eax。
加1的操作,在lock xadd   dword ptr [ecx],eax这条指令中已经完成。
后来在一天早上半梦半醒之间,突然想起了,eax寄存器存储返回值。
inc eax是为了要保证返回正确的返回值。



汇编半桶子水,研究反汇编确实比较痛苦。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值