跳转至

并发

源码分析之Go Once

Go 中的 Atomic Values 等价于 C++ 的顺序一致性 atomics,等价于 Java 中的 volatile变量;

在看 Go 中 sync.once包中的源码实现时,疑问为什么要用atomic的 load 和 store,而不能直接读取和赋值。

if o.done == 0 {
    // 为什么不使用? defer func(){o.done == 1}()
    defer atomic.StoreUint32(&o.done, 1)
    f()
}