第六十八章:等待与通知
TL;DR
- 条件变量让线程在条件不满足时睡眠,并在状态变化后被通知。
正文
锁只能回答“谁能进来”,不能回答“现在有没有数据”。条件变量把两件事配合起来:线程持锁检查条件;不满足时原子地释放锁并睡眠;另一线程改变状态后通知等待者,等待者醒来重新检查。
必须重新检查,因为醒来不等于条件必然仍成立,其他线程可能已先一步改变状态。
思考题
为什么等待前要先持有同一把锁?
小结
- 条件变量协调状态变化,不取代互斥锁。
思考题答案(仅供参考)
锁让检查条件与开始等待之间没有空隙,避免错过通知。
协议
本文采用 CC BY-NC-SA 4.0 协议发布。