编辑: 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个;

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题