sync.Mutex
sync.RWMutex
sync.Once
一种特殊的锁,只有一个暴露的方法Do,其接收一个函数作为参数,并保证这个函数只会执行一次。(用来做懒加载)如下所示的PopCount函数,其作用是统计一个64位变量中比特1的个数,需要一个pc辅助数组,用以下的方式可以保证pc数组的懒加载。
var loadPcOnce sync.Once// pc[i] is the population count of i.var pc [256]bytefunc initPc() {for i := range pc {pc[i] = pc[i/2] + byte(i&1)}}// PopCount returns the population count (number of set bits) of x.func PopCount(x uint64) int {loadPcOnce.Do(initPc)return int(pc[byte(x>>(0*8))] +pc[byte(x>>(1*8))] +pc[byte(x>>(2*8))] +pc[byte(x>>(3*8))] +pc[byte(x>>(4*8))] +pc[byte(x>>(5*8))] +pc[byte(x>>(6*8))] +pc[byte(x>>(7*8))])}
