linux中atomic的实现理解(搞成1条汇编指令)

1  typedef struct { volatile int counter; } atomic_t; ----- volatile意思是不要对其进行优化,这里如果不优化的话就会被汇编成直接访问内存地址,而不是操作寄存器。

2  #define automic_set(v, i) (((v)->counter) = (i)) ----- 会被汇编成一条访问内存的指令。

3   Atomic_add(int i, atomic_t *v)

static __inline__ void atomic_add(int i, atomic_t *v)
{
__asm__ __volatile__(
LOCK "addl %1,%0"
:"=m" (v->counter)
:"ir" (i), "m" (v->counter));
}

分析下这个extended inline asm(gnu as == gas // AT&T)的语法:

asm ( assembler template 
: output operands /* optional */
: input operands /* optional */
: list of clobbered registers /* optional */
);

这是会被汇编成一条指令,%0代表output,%1代表i,__volatile__保证这条代码不被优化,__asm__表示此处潜入汇编,output 和 input中的"m" "ir"是这种扩展潜入汇编的constraint。m代表这需要访问内存地址来取出数值,i代表这是个立即数,r代表可以放到任何的寄存器中。

具体可以去查:GCC-Assembly-Inline关键字.

其他的操作都是类似的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值