文章目录
生产者消费者模型
生产者消费者模型可以通过一个容器来解决生产者和消费者的耦合问题。生产者和消费者彼此通过阻塞队列来进行通讯。
生产者将生产数据送给阻塞队列,消费者从阻塞队列中获取数据。阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力偏差。
使用生产者消费者模型,可以有效地解决对生产者和消费者的解耦,并发问题。
基于阻塞队列的生产者消费者模型
阻塞队列
阻塞队列和普通的队列区别在于,当队列为空时,从队列获取元素的操作将会被阻塞。直到队列中加入了新的元素。同样的,当队列满时,向队列添加新元素的操作就会被阻塞,直到队列中有元素出队。
代码实现
#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