第六十九章:生产者与消费者
TL;DR
- 有界缓冲区把互斥、等待和通知放进一个完整协作例子。
正文
生产者向有限队列放数据,队列满时等待;消费者取数据,队列空时等待。两者先用锁保护队列,再用“非满”“非空”两个条件变量分别等待和通知。
这揭示同步的分工:锁保护共享结构的一致性,条件变量等待结构处于可进行下一步的状态。
思考题
为什么“队列非空”和“队列非满”常用两个条件?
小结
- 生产者消费者是协作而非单纯互斥的典型。
思考题答案(仅供参考)
生产者和消费者等待的是不同条件,分别通知可减少无效唤醒并表达清楚意图。
协议
本文采用 CC BY-NC-SA 4.0 协议发布。