sync Mutex
Mutex 的作用是保证同一时间只有一个 goroutine 可以进入临界区
go
var count int
func worker() {
for i := 0; i < 1000; i++ {
count++
}
}go
for i := 0; i < 10; i++ {
go worker()
}会发生数据竞争,所以最终count 只会小于 10000
使用 Mutex优化
go
var count int
var mu sync.Mutex
func worker() {
for i := 0; i < 1000; i++ {
mu.Lock()
count++
mu.Unlock()
}
}mu.Lock() 后,goroutine 就会阻塞,直到 Unlock()