C++11多线程练习 ——生产者与消费者

本文探讨了C++11中的多线程应用,重点在于解决生产者与消费者问题。这个问题要求生产者线程和消费者线程异步运行,同时确保两者之间的同步,避免空缓冲区取产品和满缓冲区投产品的情况发生。
摘要由CSDN通过智能技术生成

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 (
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值