Go原子操作和锁的区别

原子操作由底层硬件支持,而锁是基于原子操作+信号量完成的。

若实现相同的功能,前者通常会更有效率原子操作是单个指令的互斥操作;互斥锁/读写锁是一种数据结构,可以完成临界区(多个指令)的互斥操作,扩大原子操作的范围。

原子操作是无锁操作,属于乐观锁;说起锁的时候,一般属于悲观锁。

原子操作存在于各个指令/语言层级,比如“机器指令层级的原子操作”,“汇编指令层级的原子操作”,“Go语言层级的原子操作”等。

锁也存在于各个指令/语言层级中,比如“机器指令层级的锁“,”汇编指令层级的锁“,”Go语言层级的锁“等。

原子操作相关可以参考:原子操作

Golang 源码分析系列之 atomic 底层实现

聊聊并发(五)——原子操作的实现原理

64位字原子操作的地址对齐保证要求

Go 语言标准库中 atomic.Value 的前世今生

Go语言的原子操作和互斥锁的区别

0%