2017-03-02 22 views
-1

我使用下面的代码,过程中获得唯一的ID:如果计数器值溢出UINT32的限制原子AddUint32溢出

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

会发生什么?

+0

请参阅 “整数溢出” 的规格:https://golang.org/ref/spec#Arithmetic_operators – JimB

回答

2

值环绕,这是很容易证明:

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

+0

嗨,是的,我发现了我自己。我认为在这种情况下可能会遇到一些瓶颈。不管怎么说,还是要谢谢你!只是想确认... – ArkadyB