生产者消费者问题的P V 操作

生产者消费者问题的 P V 操作

1.单个生产者消费者问题:

①问题概述:
一个系统有一个生产者,一个消费者和一个资源池(可以放一定数量的产品),生产者生产产品 放到资源池中,消费者从资源池中拿走产品进行消费。

②问题分析:
生产者、消费者共享一个初始为空、容量大小为n的 资源池缓冲区。只有资源池缓冲区没满的时候,生产者才能把产品放入缓冲区,否则必须等待。只有缓冲区不为空的时候,消费者才能从中取出产品,否则必须等待。

总而言之:缓冲区是临界资源,各个进程必须互斥访问。

不能同一时刻放入,拿出,没有产品不能拿出,资源池已经放满就不能再放。

伪代码:

Semaphore mutex=1 //互斥信号量,实现对缓冲区的互斥访问
Semaphore empty=n //同步信号量,表示空闲缓冲区的数量
Semaphore full=0 //同步信号量,表示产品的数量(非空缓冲区 的数量)
Producer(){
While(1){
生产一个产品;
P(empty); //消耗一个空闲缓冲区
P(mutex); //检查互斥信号量,并占有访问权限
把产品放入缓冲区;
V(mutex);//释放互斥信号量
V(full); //增加一个产品
}
}

Consumer(){
While(1){
P(full); //消耗一个产品
P(mutex); //占有互斥访问权限
从缓冲区取出一个产品;
V(mutex); //释放互斥访问权限
V(empt);//增加一个空闲缓冲区
使用产品;
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值