编辑: yyy888555 | 2019-07-02 |
又设有三个工人,其活动分别为: 工人1活动:Do{ 加工一个车架;
车架放入箱中;
} while(1);
工人2活动:Do{ 加工一个车轮;
车轮放入箱中;
} while(1);
工人3活动:Do{ 箱中取一车架;
箱中取二车轮;
组装为一台车;
} while(1);
试用信号量与P、V操作实现三个工人的合作 进程管理习题 工人1与工人
3、工人2与工人3构成生产者与消费者关系,通过共同的缓冲区相联系.从资源的角度看,箱子中的空位置相当于工人1和工人2的资源,而车架和车轮相当于工人3的资源.定义3个信号量: empty=N;
(空位置) wheel=0;
(车轮) frame=0;
(车架) 进程管理习题 empty=N;
wheel=0;
frame=0;
工人1: 加工一个车架;
P(empy);
车架放入箱中;
V(frame);
工人2: 加工一个车轮;
P(empy);
车轮放入箱中;
V(wheel);
工人3: P(frame);
箱中取一车架;
P(wheel);
P(wheel);
箱中取二车轮;
V(empty);
V(empty);
V(empty);
组装为一台车;
进程管理习题 为防止死锁,箱中车架的数量不能超过N-2,车轮的数量不能超过N-1,所以设置:s1=N-2,s2=N-1 工人1: 加工一个车架;
P(s1);
车架放入箱中;
V(frame);
工人2: 加工一个车轮;
P(s2);
车轮放入箱中;
V(wheel);
工人3: P(frame);
箱中取一车架;
V(s1);
P(wheel);
P(wheel);
箱中取二车轮;
V(s2);
V(s2);
组装为一台车;
进程管理习题 为防止死锁,箱中车架的数量不能超过N-2,车轮的数量不能超过N-1,所以设置: s1=N-2,s2=N-1,empty=N 工人1: 加工一个车架;
P(s1);
P(empty);
车架放入箱中;
V(frame);
工人2: 加工一个车轮;
P(s2);
P(empty);
车轮放入箱中;
V(wheel);
工人3: P(frame);
箱中取一车架;
V(empty);
V(s1);
P(wheel);
P(wheel);
箱中取二车轮;
V(empty);
V(empty);
V(s2);
V(s2);
组装为一台车;
进程管理习题 桌上有一空盘,允许存放一只水果.爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果.规定当盘空时一次只能放一只水果供吃者取用,请用P,V原语实现爸爸,儿子女儿三个进程的同步. 进程管理习题 设三个信号量: S:表示盘子是否为空,初值为1;
So:表示盘中是否有桔子,初值为0 ;
Sa:表示盘中是否有苹果,初值为0. int s=1;
int sa=0;
int so=0;
main(cobegin father(son(daughter();
coend } 进程管理习题 father() { While (1) { P(s);
将水果放入盘中;
if (放入的是桔子)v(so) else v(sa) son() { While (1) { P(so);
从盘中取出桔子;
v(s);
吃桔子;
} } daughter() { While (1) { P(sa);
从盘中取出苹果;
v(s);
吃苹果;
进程管理习题 设有一个可以装A、B两种物品的仓库,其容量无限大,但要求仓库中A、B两种物品的数量满足下述不等式:M ≤ A物品数量-B物品数量≤N 其中,M和N为正整数.试用信号量和P、V操作描述A、B两种物品的入库过程. 进程管理习题 已知条件 -M ≤ A物品数量-B物品数量≤N可以拆分成两个不等式,即:A物品数量-B物品数量≤N B物品数量-A物品数量≤M 这两个不等式的含义是:仓库中A物品可以比B物品多,但不能超过N个;
B物品可以比A物品多,但不能超过M个. 进程管理习题 A物品入库: P(a);
A物品入库;
V(b);
B物品入库: P(b);
B物品入库;
V(a);
设两个信号量:a=N;
b=M 如果没有B,A最多只能N个;