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 协议发布。