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位操作系统的设计与实现
Links #
GCC文档: Extended Asm - Assembler Instructions with C Expression Operands