深入理解 Go sync.Cond
sync.Cond 是 Go 标准库中的条件变量,用于让 goroutine 等待某个条件成立后再继续执行。
一、适合场景
- 多个 goroutine 等待状态变化;
- 生产者消费者;
- 任务队列;
- 资源池;
- 批量唤醒等待者。
二、核心方法
| 方法 | 说明 |
|---|---|
| Wait | 等待条件 |
| Signal | 唤醒一个等待者 |
| Broadcast | 唤醒所有等待者 |
三、使用模式
cond.L.Lock()
for !condition {
cond.Wait()
}
cond.L.Unlock()
Wait 通常要放在循环中,因为被唤醒不代表条件一定成立。
四、注意事项
- 必须配合锁使用;
- 条件检查要放在循环里;
Signal和Broadcast不会保存通知;- 简单场景可以优先考虑 channel。