一、实验内容
一组生产者向一组消费者提供消息,它们共享一个有界缓冲池,生产者向其中投放消息,消费者从中取得消息。消费者从中取得消息。假定这些生产者和消费者互相等效,只要缓冲池未满,生产者可将消息送入缓冲池,只要缓冲池未空,消费者可从缓冲池取走一个消息。
二、背景知识
生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例。该问题描述了两个共享固定大小缓冲区的线程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据。
三、思路
创建一个生产者消费者类,在类中定义生产者和消费者两个函数,通过信号量进行生产和消费的操作。再建立一个show函数对缓冲区情况进行输出。建立一个菜单,方便使用者自行进行生产和消费的操作。
四、源程序清单
#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
#define N 100
class PC
{private:
int in,out;
int count;
int mutex;
int empty,full;
int buffer[N];
public:
PC()
{
in=0;out=0;mutex=1;empty=N;full=0;count=0;
for(int i=0;i<N;i++)
buffer[i]=0;
}