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"是这种扩展潜入汇编的constraintm代表这需要访问内存地址来取出数值,i代表这是个立即数,r代表可以放到任何的寄存器中

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

其他的操作都是类似的。

posted @ 2011-10-19 22:53  Jack204  阅读(3369)  评论(0编辑  收藏  举报