什么原子操作
Atomic operations are performed in a single unit of task without interference from other operation。
原子操作就是不可再分的操作。换句话说,一个操作或者多个操作要么全部执行并且执行的过程中不会被任何因素打断,要么就都不执行。
怎么理解不可再分,在CPU层面, 它是原子性的
我们从一道试题说起
以下多线程对int型变量x的操作,哪几个需要进行同步:( )
A. x=y; B. x++; C. ++x; D. x=1;
什么操作需要同步进行的, 不是原子性操作,就需要同步。因为在多线程的环境中, 对非原子性操作不做同步处理,处理的结果就是未知的。
那上述哪些是原子操作呢
1. x=y
在CPU上它实际是两个操作,读取y至寄存器,再把值写入x。
它有两个原子性操作组成, 它本身不是原子操作。
- load eax, y
- store x, eax
2. x++和++x可以放在一起讨论
CPU会按3条指令的形式处理这种语句:
- 从内存读取x的值到寄存器中
- 对寄存器加1
- 再把新值写回x所处的内存地址
3. x=1
由硬件层面,提供原子性支持。
综上所述, 只有x=1是原子操作, 所以其它操作都需要同步。