atomic_add函数

atomic_add函数

atomic_add #

static inline void atomic_add(int i, atomic_t *v)
{
    __asm__ __volatile__("lock;" "addl %1,%0"
                : "+m" (v->a_count)
                : "ir" (i));
}

“lock;” “addl %1,%0” 是汇编指令部分, %1,%0是占位符,它表示输出、输入列表中变量或表态式,占位符的数字从输出部分开始依次增加,这些变量或者表态式会被GCC处理成寄存器、内存、立即数放在指令中。

“+m” (v->a_count) 是输出列表部分,“+m”表示(v->a_count)和内存地址关联。 “ir” (i) 是输入列表部分,“ir” 表示i是和立即数或者寄存器关联。

From #

08 | 锁:并发操作中,解决数据同步的四种方法 一个64位操作系统的设计与实现

GCC文档: Extended Asm - Assembler Instructions with C Expression Operands