2017-03-02 51 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