生产者消费者模型三(多-单模型)

本文介绍了多生产者-单消费者问题的解决方案,通过使用条件变量和互斥量来确保生产者和消费者对缓冲区的正确访问。在缓冲区满时,生产者会等待,直到消费者消费掉部分产品;在缓冲区空时,消费者会等待,直到生产者生产新产品。示例代码展示了如何在C++中实现这种模型。

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



生产者——消费者问题(producer-consumer),又名:有界缓冲区(bounded-buffer)问题
多生产者——单消费者

设计要点:
 当缓冲区满已满,而此时生产者还想向缓冲区中放入一个新的数据项时。则让生产者睡眠,待消费者从缓冲区中取出一个或多个数据项时再唤醒生产者。
 同时,多个生产者,则需要多添加一个条件变量和计数变量,用来保证多个生产者之间对消息队列的互斥访问。

 当缓冲区满已空,而此时消费者还想从缓冲区中取出一个新的数据项时。则让消费者睡眠,待生产者向缓冲区中放入一个或多个数据项时再唤醒消费者。

代码实现如下:(IDE : VS2017)

#include"stdafx.h"
#include<string>
#include<stdio.h>
#include <windows.h>//Sleep()函数需要包含的头文件
#include <stdlib.h>
#include<thread>
#include <mutex>
#include<iostream>
using namespace std;

static const int kItemRepository