Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

第六十八章:等待与通知

TL;DR

  • 条件变量让线程在条件不满足时睡眠,并在状态变化后被通知。

正文

  锁只能回答“谁能进来”,不能回答“现在有没有数据”。条件变量把两件事配合起来:线程持锁检查条件;不满足时原子地释放锁并睡眠;另一线程改变状态后通知等待者,等待者醒来重新检查。

  必须重新检查,因为醒来不等于条件必然仍成立,其他线程可能已先一步改变状态。

思考题

为什么等待前要先持有同一把锁?

小结

  • 条件变量协调状态变化,不取代互斥锁。

思考题答案(仅供参考)

  锁让检查条件与开始等待之间没有空隙,避免错过通知。

协议

本文采用 CC BY-NC-SA 4.0 协议发布。