什么情况下需要用到互斥锁sync.Mutex?

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中的++为非原子性操作

posted on 2021-09-09 10:53  ExplorerMan  阅读(128)  评论(0编辑  收藏  举报

导航