3 代码实例 前一章内容为了简单的说明一些函数的用法, 所列举的例子有些牵强,因此在本章列举了一 些多线程常见的实例 3.1 生产者消费者问题 生产者-消费者模型是经典的多线程并发协作模 型。 生产者用于生产数据,生产一个就往共享数据 区存一个,如果共享数据区已满的话,生产者 就暂停生产,等待消费者的通知后再启动。 消费者用于消费数据,一个一个的从共享数据 区取,如果共享数据区为空的话,消费者就暂 停取数据,等待生产者的通知后再启动。 生产者与消费者不能直接交互,它们之间所共享 的数据使用队列结构来实现: 如下代码着重强调的是简单易懂:includeinclude#includeusing namespace std;//缓冲区存储的数据类型 struct CacheData{ //商品id int id; //商品属性 string data;};queue Q;//缓冲区最大空间 const int MAX_CACHEDATA_LENGTH = 10;//互斥量,生产者之间,消费者之间,生产者和消费者之间,同时都只能一个线程访问缓冲区 mutex m;condition_variable condConsumer;condition_variable condProducer;//全局商品id int ID = 1;//消费者动作 void ConsumerActor(){ unique_lock lockerConsumer(m); cout