golang编程总结(九)原子变量,WaitGroup,Sync.Once
原子操作
因为原子操作是基于cpu指令实现的,所以需要快速完成,支持的操作合数据类型并不多,int32,int64,uint32.uint64,uintptr,add,cas,load,store,swap
atomic.value
1.只能存储一种类型的值,即使是接口也绕不过这个限制,
2.不能存nil
WaitGroup
1.wait方法会阻塞,知道计数值为0时被唤醒。
2.最好让Add和Wait在同一个go routine中,避免异步操作导致的计数值异常的问题
sync.Once
1.参数方法执行完毕,才会更新计数器,可能会阻塞调用do的goroutine
2.一定会更新计数器,即使f执行时panic了

浙公网安备 33010602011771号