sync包once小问题

goCurrent · 2023-09-13 23:55:27 · 3076 次点击

感谢解答,其实道理我能理解,但是就代码论代码,如果 sync.Once 写成如下这样,会有线程安全问题吗?如果有,会哪些地方有线程安全问题。

type Once struct {
    done uint32
    m    Mutex
}

func (o *Once) Do(f func()) {
    if o.done == 0 {
        o.doSlow(f)
    }
}

func (o *Once) doSlow(f func()) {
    o.m.Lock()
    defer o.m.Unlock()
    if o.done == 0 {
        defer o.done = 1
        f()
    }
}
#14
更多评论

@kingJ 线程安全是指啥,两个goroutine同时读一个int应该不会panic

#2