其他分享
首页 > 其他分享> > go标准库sync/atomic

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