操作系统复习(一)进程管理(PV操作)

一些PV操作的题目

王道P107 15
设自行车生产线上有一个箱子,其中有N个位置(N≥3),每个位置可存放一个车架或者一个车轮,设有3名工人,其活动分别为:

工人1活动:

do{
	加工一个车架;
	车架放入箱中;
}while(1)

工人2活动:

do{
	加工一个车轮;
	车轮放入箱中;
}while(1)

工人3活动:

do{
	箱中取一个车架;
	箱中取两个车轮;
	组装为一辆车;
}while(1)

试分别用信号量PV操作实现三名工人的合作,要求解中不含死锁。

分析:
先不考虑死锁问题,工人1、2分别与3是生产者和消费者关系。箱子内的空位是工人1、2的资源,车架和车轮是工人3的资源。

再来看死锁问题:如果说工人1或者工人2某一方生产速度很快,N个空位全部为车轮,或者≥N-1个空位是车架的话(此时最多只能放入一个车轮),工人3永远得不到组装一个完整的车的资源,就会发生死锁。所以车架最多不能达到N-2个,也就是车架的信号量初值要设置为N-2,车轮要设置为N-1。

故整个活动的伪代码如下:

semaphore empty=N;//箱子内的空位
semaphore weel=0;//车轮
semaphore frame=0;//车架
semaphore s1=N-2;//车架最大值
semaphore s2=N-1;//车轮最大值

工人1活动:
do{
	加工一个车架;
	P(empty);//检测是否还有空位置
	P(s1);//检测车架是否还有空位
	车架放入箱中;
	V(frame);//车架数量+1
}while(1)

工人2活动:
do{
	加工一个车轮;
	P(empty);//检测是否还有空位
	P(s2);//检测车轮是否还有空位
	车轮放入箱中;
	V(wheel);//车轮数+1
}while(1)

工人3活动:
do{
	P(frame);//检测是否有车架
	箱中取一个车架;
	V(empty);//空位+1;
	V(s1);//车架空位+1;
	P(wheel);
	P(wheel);
	箱中取两个车轮;
	V(empty);
	V(empty);
	V(s2);
	V(s2);
	组装为一辆车;
}while(1)
  • 9
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值