2017-03-02 5 views
-1

私は、プロセス内で一意のIDを取得するために以下のコードを使用しています:原子AddUint32オーバーフロー

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

カウンタ値がUINT32の制限をオーバーフローした場合どうなりますか?

+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

関連する問題