go标准库sync/atomic
作者:互联网
atomic 是提供原子操作的模块。
所谓原子是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束不会切换其他线程。
上标准库:
还有这个 atmoc.Value 这是原子值 后面会写很重要,不知道为什么标准库文档里没看到。
标准库上面的所有操作看函数名就很清楚了,
ADD、store、Load、swap、CAS
使用方法都是一样的,只是实际操作数的类型是不同的而已。所以只对每种类型举例一次其他以此类推即可。
ADD 系列函数,是 ”原子性的” 对一个value 进行+n的操作。
这个+n是在原有value的基础上进行+操作。
var a int32 = 5 atomic.AddInt32(&a,1) fmt.Println(a)
那进行减操作只要第二个操作数改成负数即可。
var a int32 = 5 atomic.AddInt32(&a,-1) //这样就是减1了 fmt.Println(a)
Load 和Store系列函数,许多变量的读写无法在一个时钟周期内完成,而此时执行可能会被调度到其他线程,无法保证并发安全。
Load 保证读取的不是正在写入的值。
Store 保证原子性的储存一个值。
=。=没必要举例吧。
Swap 系列函数,“原子性的” 将新值保存到*addr并返回旧值。
Store 、Swap、ADD 的不同点。
Store是储存一个值不考虑原值是什么
Swap是进行“交换”,用新值和原值交换,把原值返回。
ADD是在原值的基础上增加一个单位,并返回新值。
=。=没写完休息会儿接着写
标签:原值,sync,原子,ADD,atomic,go,操作,Store 来源: https://www.cnblogs.com/thotf/p/12652693.html