原子操作即是进行过程中不能被中断的操作。针对某个值的原子操作在被进行的过程中,CPU绝不会再去进行其他的针对该值的操作。 为了实现这样的严谨性,原子操作仅会由一个独立的CPU指令代表和完成。
atomic 常见的五种操作
- 增减
- 载入
- 比较并交换
- 交换
- 存储
最常用应该是增减和载入了,可以理解为写和读。
func main() {
var opts int64 = 0
go func(){
atomic.AddInt64(&opts, 3)
}
fmt.Println("opts: ", atomic.LoadInt64(&opts))
}
go run -race 不再出现资源竞争异常。 其他更多使用方式参考如下链接。