package main
import (
"fmt"
"runtime"
"time"
)
var a int
func main() {
runtime.GOMAXPROCS(runtime.NumCPU())
ch := make(chan int)
for i :=0;i<1000;i++{
go foo()
go foo()
go foo()
}
time.Sleep(2*time.Second)
fmt.Println("======",a)
<-ch
}
func foo() {
a++
fmt.Println(a)
}
需要在多个goroutine下读和写的数据就需要同步保护,可以用sync.Mutex,对于简单数据也可以用sync/atomic提供的原子操作。
golang中的++为非原子性操作