Appearance
Day 11 - 同步原语
WaitGroup
go
var wg sync.WaitGroup
for i := 0; i < 5; i++ {
wg.Add(1)
go func() {
defer wg.Done()
// work
}()
}
wg.Wait()Mutex
go
var mu sync.Mutex
var counter int
mu.Lock()
counter++
mu.Unlock()RWMutex
go
var rwmu sync.RWMutex
// 读操作
rwmu.RLock()
readValue := counter
rwmu.RUnlock()
// 写操作
rwmu.Lock()
counter++
rwmu.Unlock()Once
go
var once sync.Once
once.Do(func() {
fmt.Println("只执行一次")
})面试考点
问题:Mutex和RWMutex的区别?
答案:
- Mutex:互斥锁,任何操作都需要获取锁
- RWMutex:读写锁,读操作可以并发,写操作需要独占
使用场景:读多写少时用RWMutex提高并发性能。
📅 学习进度
| Day | 主题 | 状态 |
|---|---|---|
| 01-10 | 基础/并发 | ✅ |
| 11 | 同步原语 | ✅ |
| 12 | 错误处理 | ⬜ |
