跳到主要内容

深入理解 Go sync.Cond

sync.Cond 是 Go 标准库中的条件变量,用于让 goroutine 等待某个条件成立后再继续执行。

一、适合场景

  • 多个 goroutine 等待状态变化;
  • 生产者消费者;
  • 任务队列;
  • 资源池;
  • 批量唤醒等待者。

二、核心方法

方法说明
Wait等待条件
Signal唤醒一个等待者
Broadcast唤醒所有等待者

三、使用模式

cond.L.Lock()
for !condition {
cond.Wait()
}
cond.L.Unlock()

Wait 通常要放在循环中,因为被唤醒不代表条件一定成立。

四、注意事项

  • 必须配合锁使用;
  • 条件检查要放在循环里;
  • SignalBroadcast 不会保存通知;
  • 简单场景可以优先考虑 channel。