生产者与消费者模型
生产者与消费者模型是经典的同步与互斥模型。
- 支持忙闲不均
- 支持并发
- 解耦合
有两类进程分别为消费者进程和生产者进程,对同一个临界资源进行访问,生产者不断生产产品,并将产品作为资源加入缓冲区,而消费者不断的消费缓冲区中的资源,利用信号量实现两类进程的同步与互斥。
其中生产者与生产者之间具有互斥关系;
消费者与消费者之间也具有互斥关系;
而生产者与消费者之间具有同步与互斥关系。
即一个场所,两类角色,三类关系。
利用C++封装一个线程安全的队列,实现生产者与消费者模型:
#include <iostream>
#include <queue>
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
#define MAX_QUE 10
class BlockQueue
{
private:
std::queue<int> _queue; // 动态增长的队列
int _capacity; // 队列最大容量
pthread_cond_t _cond_productor; // 生产者等待队列
pthread_cond_t _cond_consumer; // 消费者等待队列
pthread_mutex_t _mutex; // 实现互斥
public:
BlockQueue(int queNum = MAX_QUE):_capacity(queNum)
{
pthread_mutex_init(&_mutex, NULL);
pthread_cond_init(&_cond_consumer, NULL);
pthread_cond_init(&_cond_productor,