操作系统 - - 生产者—消费者问题(PV操作)代码显示

生产者 - 消费者问题

假设在生产者和消费者之间的公用缓冲池具有n个缓冲区,可利用互斥信号量mutex实现诸进程的互斥使用;利用信号量empty和full分别表示缓冲池中空缓冲区和满缓冲区的数量
又假设这些生产者和消费者互相等效,只要缓冲池未满,生产者便可将消息送入缓冲池;只要缓冲池未空,消费者便可从缓冲池取走一个消息

int in =0,out = 0;
item buffer[n];							//缓冲区列表	
semaphore mutex = 1,empty = n,full = 0;  //互斥信号量为1,起始缓冲区为空,没有产品
void producer(){			//生产者进程
	do{
		producer an item nextp;			
		...
		P(empty);  				//申请一个空闲缓存区
		P(mutex);				//申请使用缓冲池
		buffer[in] = nextp;		//向缓冲池投放产品
		in = (in+1)%n;			
		V(mutex);				//释放使用缓冲池的资源
		V(full);				//缓冲池的产品数量加1
	}while(TRUE);
}
void consumer(){
	do{
		producer an item nextp;
		P(full);			//产品数量减1
		P(mutex);			//申请使用缓冲池
		nextc = buffer[out]; 
		out = (out+1)%n;    
		V(mutex);			//释放使用缓冲池的资源
		V(empty);			//缓冲池空闲区加1
		consumer the item in nextc;   //消费一个产品
		...
	}while(TRUE);
}
void main(){
	cobegin
		producer();consumer();
	coend
}

你可能感兴趣的:(操作系统期末复习,操作系统)