Go原子变量

【Go原子变量】通过同步/原子程序包, 原子变量用于管理状态并避免争用条件。原子计数器可以通过多个go例程进行访问。
Go原子变量示例

package main import ( "sync" "time" "math/rand" "fmt" "sync/atomic" ) var wait sync.WaitGroup var count int64 funcincrement(s string){ for i :=0; i< 10; i++ { time.Sleep(time.Duration((rand.Intn(3)))*time.Millisecond) atomic.AddInt64(& count, 1) fmt.Println(s, i, "Count -> ", count) } wait.Done() } func main(){ wait.Add(2) go increment("foo: ") go increment("bar: ") wait.Wait() fmt.Println("last count value " , count) }

输出:
foo:0 Count -> 1 foo:1 Count -> 2 bar:0 Count -> 3 bar:1 Count -> 4 bar:2 Count -> 5 foo:2 Count -> 6 bar:3 Count -> 7 bar:4 Count -> 8 bar:5 Count -> 9 foo:3 Count -> 10 bar:6 Count -> 11 bar:7 Count -> 12 foo:4 Count -> 13 foo:5 Count -> 14 bar:8 Count -> 15 bar:9 Count -> 16 foo:6 Count -> 17 foo:7 Count -> 18 foo:8 Count -> 19 foo:9 Count -> 20 last count value20

    推荐阅读