luxuze.github.io

github pages

View on GitHub

原子操作

原子操作即是进行过程中不能被中断的操作,针对某个值的原子操作在被进行的过程中,CPU 绝不会再去进行其他的针对该值的操作。为了实现这样的严谨性,原子操作仅会由一个独立的 CPU 指令代表和完成。原子操作是无锁的,常常直接通过 CPU 指令直接实现。 事实上,其它同步技术的实现常常依赖于原子操作。

Go 对原子操作的支持

Go 语言的 sync/atomic 包提供了对原子操作的支持,用于同步访问整数和指针。

原子操作与互斥锁的区别

  1. 互斥锁是一种数据结构,用来让一个线程执行程序的关键部分,完成互斥的多个操作。
  2. 原子操作是针对某个值的单个互斥操作。
  3. 可以把互斥锁理解为悲观锁,共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程。
  4. atomic 包提供了底层的原子性内存原语,这对于同步算法的实现很有用。