// 标记
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")
}

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

Captcha Code