Go sync包:并发安全与同步原语
深入理解Go sync包中的Mutex、WaitGroup、Once、Cond等同步工具,掌握并发编程的核心技巧。 · 难度:入门 · +15XP
sync包概述
Go的sync包提供了基本的同步原语,用于在多个goroutine之间协调访问共享资源。最常用的包括Mutex(互斥锁)、RWMutex(读写锁)、WaitGroup(等待组)、Once(一次性执行)和Cond(条件变量)。
Mutex 使用示例
var mu sync.Mutex
var counter int
func increment() {
mu.Lock()
counter++
mu.Unlock()
}
WaitGroup 用法
var wg sync.WaitGroup
for i := 0; i < 5; i++ {
wg.Add(1)
go func(i int) {
defer wg.Done()
fmt.Println(i)
}(i)
}
wg.Wait()| 类型 | 用途 | 注意事项 |
|---|---|---|
| Mutex | 保护临界区 | 不可复制,使用指针传递 |
| RWMutex | 读多写少场景 | 写锁优先级高 |
| Once | 单次初始化 | 内部使用Mutex和atomic |
练习提示
请尝试用Mutex保护一个map,实现安全的并发读写。注意不要忘记调用Unlock,可以使用defer简化。