c++11 多线程 生产者 消费者

std::queue<int> g_que; // 产品列表
std::mutex g_mu;
// 以厂家角度为中心,2个条件变量,一个判断是否可以卖产品,一个判断是否可以生产产品
std::condition_variable g_canSell;		// 有产品,可以卖
std::condition_variable g_canProduct;	// 可以生产产品

const int g_maxSize = 10; // 最大产品数目

// 生产产品
void producer() {
	int i = 0;
	while (true) // 不停的生产产品
	{
		// 建立一个互斥锁,并占用该互斥锁资源
		std::unique_lock<std::mutex> locker(g_mu);
		// 生产的产品已经满了
		if (g_maxSize == g_que.size()) {
			cout << " 生产产品已经满了,停止生产,等待客户购买" << endl;
			// 可以生产产品的条件不满足,等待
			// 直到生产产品的条件满足, 才可继续执行
			g_canProduct.wait(locker);
		}
		++i;
		std::this_thread::sleep_for(std::chrono::milliseconds(50)); // 生产产品
		g_que.push(i);

		cout << " 生产好了产品" << i << endl;

		locker.unlock();
		// 产品已经生产好了,可以购买了
		// 类似与信号与槽机制中的,类似于发送了一个能卖产品的消息给了相应的另一个线程
		g_canSell.notify_one(); 
	}
}

// 卖产品给客户
void consumer() {
	while (true) // 不停的卖产品给客户
	{
		std::unique_lock<std::mutex> locker(g_mu
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值