原子AddUint32溢出

huangapple go评论89阅读模式
英文:

atomic AddUint32 overflow

问题

如果计数器的值超过了uint32的限制,会发生什么情况?

当计数器的值超过uint32的最大值时,即2^32-1,它将发生溢出。在溢出后,计数器的值将从0重新开始计数。这是因为uint32是一个无符号整数类型,它的范围是从0到2^32-1,超过这个范围的值将回绕到0。因此,如果计数器的值超过了uint32的限制,它将重新从0开始计数。

英文:

I'm using the below code to get unique IDs within process:

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

What will happen if the counter value overflows uint32's limit?

答案1

得分: 6

这是要翻译的内容:

数值会循环回绕,这很容易演示:

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


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

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

英文:

The value wraps around, which is very easy to demonstrate:

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

huangapple
  • 本文由 发表于 2017年3月2日 23:05:49
  • 转载请务必保留本文链接:https://go.coder-hub.com/42558930.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定