操作一个整数是不是永远是原子性的?
比如:
int num = 0;
num++;
这段代码经过GCC编译之后生成汇编指令:
mov DWORD PTR [rbp-4], 0
add DWORD PTR [rbp-4], 1
对于赋值操作, 一般来说就是把值写进对应的内存地址, 可以认为是原子性的, 而对num++来说, 虽然只有一行汇编指令, 但是CPU内部却是分多步执行的, 需要先把num的值读取到寄存器中, 然后对寄存器中的值进行+1操作, 最后再把寄存器中的值写回内存中, 可见这个指令就不是原子性的
当然不同的CPU架构对应的指令可能不同, 更多内容可参考链接: