原子 AddUint32 溢出

atomic AddUint32 overflow

我正在使用以下代码获取进程内的唯一 ID:

for i := 0; i < 10; i++ {
    go func() {
        for {
            atomic.AddUint32(&counter, 1)
            time.Sleep(time.Millisecond)
        }
    }()
}

如果计数器值溢出 uint32 的限制会怎样?

值回绕,很容易演示:

u := uint32(math.MaxUint32)
fmt.Println(u)
u++
fmt.Println(u)


// or
u = math.MaxUint32
atomic.AddUint32(&u, 1)
fmt.Println(u)

https://play.golang.org/p/lCOM3nMYNc