生产者消费者算法的实现

生产者消费者算法是经典的进程同步算法,下面就是运用C++模拟实现生产者消费者算法,能实现对缓冲池的互斥访问和生产者进程与消费者进程之间的同步。

实现思路:用C++写一个生产者和消费者类,在里面有一个构造函数,初始化指向产品的指针,产品数和互斥信号量mutex(互斥访问count),接下来就写了生产者和消费者算法,这里要注意的是:缓冲区满时不能生产,缓冲区空时不能消费,这里我都在运行中有提示。主函数中就是循环调用生产者消费者,然后每次调用后输出缓冲区的产品状态和数量。

源代码:

#include 
#include 
#include 
#define N 100	//产品数量
using namespace std;

/*生产者消费者类*/
class PandC{
private:
	int in,out;//指向有产品的下标
	int count;//缓冲区的产品数
	int buffer[N];//缓冲区
	int mutex;//互斥信号量
	int  empty,full;//判断缓冲区是否为空或者满
public:
	/*初始化,构造生产者消费者*/
	PandC(){
		in=0;out=0;count=0;
		empty=N;full=0;mutex=1;
		for(int i=0;i80)//利用比例控制生产速度
		x.Producer();
	else
		x.Consumer();
	x.Display();
	i++;
	}while(i!=1000);

	return 0;
}

简单实现了生产者消费者算法,用0,1表示有没有产品,还是过于抽象了,如果能用进度条那种形式就更好了,但是能力有限,只是实现了其中的算法思想,还是需要学习,改进。

你可能感兴趣的:(操作系统)