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了

posted @ 2022-03-08 14:58  故意写bug  阅读(406)  评论(0)    收藏  举报