什么情况下需要用到互斥锁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中的++为非原子性操作

上一篇:二分查找及各种变体实现


下一篇:【Golang详解】调度机制 抢占式调度