sync/atomic 互斥锁
// 标记
var initialized uint32
var lock sync.Mutex
func GetLock() {
if atomic.LoadUint32(&initialized) == 1 {
fmt.Println("如果标记为被设置,直接返回,不加锁")
}
//如果没有,则加锁申请
lock.Lock()
defer lock.Unlock()
if initialized == 0 {
instance = new(singelton)
//设置标记位
atomic.StoreUint32(&initialized, 1)
}
fmt.Println("lock ok")
}
内置的once:
// 标记
var once sync.Once
func GetLock(){
once.Do(func(){
fmt.Println("first do")
})
fmt.Println("lock ok")
}