golang-atomic包

176 阅读1分钟

参看资料:

https://www.jianshu.com/p/228c119a7d0e 
https://www.cnblogs.com/sunsky303/p/7453344.html  

sync/atomic

sync/atomic是go语言提供的非侵入式原子操作包。

Go语言提供的原子操作都是非侵入式的。它们由标准库代码包sync/atomic中的众多函数代表。

我们可以通过调用sync/atomic这些函数对几种简单的类型的值进行原子操作。

这些类型包括int32int64uint32uint64uintptr和unsafe.Pointer类型,共6个。

这些函数提供的原子操作共有5种,即:增或减、比较并交换、载入、存储和交换。

原子操作

原子操作即是进行过程中不能被中断的操作。

也就是说,针对某个值的原子操作在被进行的过程当中,CPU绝不会再去进行其它的针对该值的操作。

无论这些其它的操作是否为原子操作都会是这样。
为了实现这样的严谨性,原子操作仅会由一个独立的CPU指令代表和完成。
只有这样才能够在并发环境下保证原子操作的绝对安全。

侵入式和非侵入式

侵入式和非侵入式,是从调用关系角度来说的。

比如模块A,调用了模块B中部分功能。
那么模块A是将模块B作为自己的一部分,还是将B作为一个独立的部分,然后再去调用。

如果将模块B作为模块A的一部分,就是侵入式;

如果将B作为一个独立的部分,则为非侵入式。侵入式,往往则意味着高耦合。