1、原子函数 原子函数能够以加锁机制来同步访问整型变量和指针。
2、atomic包的AddInt64函数会同步整型值的加法,方法是强制同一时刻只有一个goroutine运行并完成这个加法操作。当goroutine试图去调用任何原子函数时,这些goroutine都会自动根据所引用的变量做同步处理。例:
var (
counter int64
wg sync.WaitGroup
)
func main() {
wg.Add(2)
go incCounter(1)
go incCounter(2)
wg.Wait()
fmt.Printf("Final Counter : %d\n", counter)
}
func incCounter(id int){
defer wg.Done()
for count := 0; count < 2; count++ {
atomic.AddInt64(&counter, 1) //安全地对counter加1
runtime.Gosched() //当前goroutine从线程退出,并放回到队列
}
}
//运行结果:
Final Counter : 4
另外两个重要的原子函数:(1)LoadInt64:安全地读整型值;(2)StoreInt64:安全地写整型值。例
3、