Cond 中 Wait 使用

func (c *Cond) Wait()

Wait()会自动释放 c.L,并挂起调用者的 goroutine。之后恢复执行,Wait()会在返回时对 c.L 加锁。

除非被 Signal 或者 Broadcast 唤醒,否则 Wait()不会返回。

由于 Wait()第一次恢复时,C.L 并没有加锁,所以当 Wait 返回时,调用者通常并不能假设条件为真。

取而代之的是, 调用者应该在循环中调用 Wait。(简单来说,只要想使用condition,就必须加锁。)

c.L.Lock()
for !condition() {
 c.Wait()
}
... make use of condition ...
c.L.Unlock()

发表评论

后才能评论