环境
Linux : 3.15.10-200.fc20.x86_64
gcc 版本: 4.8.3 20140624 (Red Hat 4.8.3-1)
__sync_* 系列的函数 : 保证原子操作(lock 指令),也保证cpu寄存器数据一致性。(其实就是直接读写内存)
volatile : 保持寄存器数据一致性(每次重新读写内存到寄存器)
C代码:
int main(void)
{
volatile int a = 10;
++a;
__sync_add_and_fetch(&a , 1);
a = 100;
a += 200;
a -= 100;
int b = 10;
++b;
b = 100;
b += 200;
b -= 100;
__sync_add_and_fetch(&a , b);
a += b;
return 0;
}
关键看这两行代码对应的汇编指令:
__sync_add_and_fetch(&a , b);
a += b;
汇编指令:
main:
.LFB0:
.cfi_startproc