一、atomic 包与原子操作
atomic 包是 Go 语言提供的原子操作(atomic operation)原语的相干接口。原子操作是绝对于一般指令操作而言的。以一个整型变量自增的语句为例:
var i int
i++
i++ 这行语句须要以下 3 条一般机器指令来实现变量 i 的自增。
LOAD:将变量从内存加载到 CPU 寄存器。ADD:执行加法指令。STORE:将后果存储回原内存地址。
这 3 条一般指令在执行过程中是可中断的。而原子操作的指令是不可中断的,它就好比一个事务,要么不执行,一旦执行就一次性全副执行结束,不可分割。
正因如此,原子操作可用于共享数据的并发同步。