生产者与消费者模型

生产者与消费者模型是经典同步互斥模型,用于处理忙闲不均和并发问题,实现进程间的解耦合。该模型涉及生产者、消费者两类进程,通过信号量控制对同一缓冲区的互斥访问。生产者之间、消费者之间以及生产者与消费者之间存在三种关系。文章介绍如何用C++封装线程安全队列来实现这一模型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

生产者与消费者模型

生产者与消费者模型是经典的同步与互斥模型。

  • 支持忙闲不均
  • 支持并发
  • 解耦合

有两类进程分别为消费者进程生产者进程,对同一个临界资源进行访问,生产者不断生产产品,并将产品作为资源加入缓冲区,而消费者不断的消费缓冲区中的资源,利用信号量实现两类进程的同步与互斥。

其中生产者与生产者之间具有互斥关系;
消费者与消费者之间也具有互斥关系;
而生产者与消费者之间具有同步与互斥关系。
即一个场所,两类角色,三类关系。

利用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, 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值