C++11多线程练习 ——生产者与消费者
生产者与消费者问题
生产者与消费者问题:所有生产者和消费者都是异步方式运行的,但它们必须保持同步,即不允许消费者到一个空的缓冲区中取产品,也不允许生产者向一个已经装满产品且尚未被取走的缓冲区中投放产品。
struct Repository
{
struct Repository(int product_num, int con_num, int pro_num)
:products_num(product_num)
, consumer_num(con_num)
, producer_num(pro_num)
, has_produced(0){
}
std::mutex mutex_repository;//仓库互斥量
std::condition_variable con_repo_un_empty;//仓库不为空的条件变量-通知消费者
std::condition_variable con_repo_un_full;//仓库不满的条件变量-通知生产者
std::deque<int> products_pool; //产品池
int products_num; //需要生产的产品数量
int has_produced; //已经生产的产品数量
int consumer_num; //消费者数量
int producer_num; //生产者数量
};
void Consume(Repository* repos, int& num)
{
while (