Skip to content

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()