Go sync.Mutex 互斥锁
Mutex 保护共享资源、Lock/Unlock、RWMutex · 难度:高级 · +20XP
Mutex — 互斥锁
sync.Mutex 确保同一时刻只有一个 goroutine访问共享数据。防止数据竞争(data race)。
基本用法
var mu sync.Mutex
var count int
func increment() {
mu.Lock() // 获取锁
count++ // 临界区:同一时刻只有一个 goroutine 能执行
mu.Unlock() // 释放锁
}
RWMutex — 读写锁
适合读多写少的场景。多个读操作可同时进行,写操作独占:
var rw sync.RWMutex
rw.RLock() // 读锁(可多个同时)
rw.RUnlock()
rw.Lock() // 写锁(独占)
rw.Unlock()
常见陷阱
- 忘记 Unlock:用 defer mu.Unlock() 确保释放
- 死锁:Lock 之后不要再次 Lock
- 复制 Mutex:Mutex 不能复制(go vet 会警告)