注意:
- 向标准缓冲区输出字符串时,由于是多线程的,所以需要使用读写锁来同步
- 使用了一个deque的队列作为仓库缓冲区,尾部存放头部取出
- 当单单模式变成多多模式时,只是针对单变多的某一方多添加一个读写锁
- 需要用到C++11中的 互斥锁、条件变量确保多线程间的数据同步
1、单生产者单消费者模式:
- 顾名思义,单生产者-单消费者模型中只有一个生产者和一个消费者:
- 生产者不停地往产品库中放入产品;
- 消费者则从产品库中取走产品;
- 产品库容积有限制,只能容纳一定数目的产品;
- 如果生产者生产产品的速度过快,则需要等待消费者取走产品之后,产品库不为空才能继续往产品库中放置新的产品;
- 相反,如果消费者取走产品的速度过快,则可能面临产品库中没有产品可使用的情况,此时需要等待生产者放入一个产品后,消费者才能继续工作。
#include <thread>
#include <iostream>
#include <mutex>
#include <condition_variable>
#include <deque>
using namespace std;
static const int kItemsToProduce = 20;
std::mutex stdoutMutex;
struct ItemRepository
{
deque<int> itemQueue;
int MaxSize = 10;
std::mutex mtx;
std::condition_variable repository_notFull;
std::condition_variable repository_notEmpty;
}gItemRepository;