什么是生产者消费者模型?
生产者消费者模型是一种思想:将生产者与消费者分别放到不同的执行流(线程)中完成,中间增加一个数据缓冲区,一个线程作为生产者生产数据,另一个线程作为消费者处理数据,不同线程通过中间的数据缓冲区进行交互(这里的数据缓冲区常用一个阻塞队列),生产者生产出数据后,放到缓冲区中不需等待消费者,而消费者需要数据时直接从缓冲区中读取,平衡了生产者与消费者处理数据的能力
生产者与消费者模型优点:
- 1.解耦合
- 2.支持忙闲不均
- 3.支持并发 (并发:轮询处理,并行:同时处理)
此处的支持并发,指的是可以有多个执行流进行处理
生产者与消费者模型应用场景: 一个进程即需要产生数据,又需要处理数据
代码实现
//这是生产者消费者模型的代码
#include<iostream>
#include<queue>
#include<stdlib.h>
#include<pthread.h>
#include<unistd.h>
#define NUM 5
class BlockQueue
{
private:
std::queue<int> q;
int cap;
pthread_mutex_t mutex;
pthread_cond_t full;
pthread_cond_t empty;
private:
void LockQueue() //队列加锁
{
pthread_mutex_lock(&mutex);
}
void UnlockQueue() //队列解锁
{
pthread_mutex_unlock(&mutex);
}
void ProductWait() //队列满,生产者等待
{
pthread_cond_wait(&full,&mutex);
}
voi