原子 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)
我正在使用以下代码获取进程内的唯一 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)