• Dmitriy Vyukov's avatar
    sync: improve Once fast path · d2ab2b9f
    Dmitriy Vyukov authored
    Use atomic.LoadUint32(&done) instead of
    atomic.AddInt32(&done, 0) on fast path.
    
    benchmark            old ns/op    new ns/op    delta
    BenchmarkOnce            13.40         7.26  -45.82%
    BenchmarkOnce-2          22.90         4.04  -82.36%
    BenchmarkOnce-4          25.60         2.16  -91.56%
    BenchmarkOnce-8          25.80         1.38  -94.65%
    BenchmarkOnce-16         24.40         1.33  -94.55%
    
    (on HP Z600, 2 x Intel Xeon E5620, 8 HT cores, 2.4 GHz)
    
    R=golang-dev, rsc
    CC=golang-dev
    https://golang.org/cl/4787041
    d2ab2b9f
once.go 1.21 KB