【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