linux下基于阻塞队列的生产者消费者模型

本文介绍了如何在Linux环境下利用阻塞队列实现生产者消费者模型。阻塞队列作为缓冲区,平衡生产者和消费者的处理能力,解决两者之间的耦合问题并有效处理并发。文中详细讲解了阻塞队列的概念,并提供了代码实现。
摘要由CSDN通过智能技术生成

生产者消费者模型

生产者消费者模型可以通过一个容器来解决生产者和消费者的耦合问题。生产者和消费者彼此通过阻塞队列来进行通讯。
生产者将生产数据送给阻塞队列,消费者从阻塞队列中获取数据。阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力偏差。

使用生产者消费者模型,可以有效地解决对生产者和消费者的解耦,并发问题。

基于阻塞队列的生产者消费者模型

阻塞队列

阻塞队列和普通的队列区别在于,当队列为空时,从队列获取元素的操作将会被阻塞。直到队列中加入了新的元素。同样的,当队列满时,向队列添加新元素的操作就会被阻塞,直到队列中有元素出队。

代码实现

#ifndef __QUEUE_BLOCK_H__
#define __QUEUE_BLOCK_H__


#include<iostream>
#include<queue>
#include<pthread.h>
#include<unistd.h>


class Task // 这个就是我们进入阻塞队列的任务
{
   
public:
	int x;
	int y;
public:
	Task(int _x= 5,int _y=5):x(_x),y(_y){
   }
	int Run()
	{
   
		return x+y;
	}

	~Task(){
   }	
};

//  其实完全可以写成模板 但是这里我偷懒了。。。 嗯
class BlockQueue{
   
private:

	std::queue<Task> q;
	size_t cap;
	pthread_mutex_t lock; //互斥锁
	pthread_cond_t c_cond; //将来消费者,在该条件变量下等待
	pthread_cond_t p_cond;//将来生产者,在该条件变量下等待
	// 封装
	bool isFull()    // 队列判满
	{
   
		return
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值