操作系统 - - 生产者—消费者问题(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
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值