您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 3进程同步与通信习题
进程同步习题1、有3个进程PA,PB和PC合作解决文件打印问题:–PA将文件记录从磁盘读入主存的缓冲区1,每执行一次读一个记录;–PB将缓冲区1的内容复制到缓冲区2,每执行一次复制一个记录;–PC将缓冲区2的内容打印出来,每执行一次打印一个记录。缓冲区的大小等于一个记录大小。请用P,V操作来保证文件的正确打印。。缓冲区1缓冲区2PA从磁盘读入PB复制PC打印设置4个信号量:empty1,empty2,full1,full2.Empty1及Empty2分别表示缓冲区1及缓冲区2是否为空,初值为1。Full1,full2分别表示缓冲区1及缓冲区2是否有记录可供处理,其初值为0。PC(){While(1){P(full2);从缓冲区2取一个记录;V(empty2);打印记录;}}PA(){While(1){从磁盘读一个记录;P(empty1);将记录存入缓冲区1;V(full1);}}PB(){While(1){P(full1);从缓冲区1中取出记录;v(empty1);P(empty2);将记录存入缓冲区2;V(full2);}}Intempty1=1,empty2=1,full1=0,full2=0;main(){CobeginPA();PB();PC();Coend}2、公共汽车上,司机和售票员的活动分别为:•司机的活动:–启动车辆;–正常行驶,–到站停车•售票员的活动:–关车门;–售票;–开车门;例:司机P1售票员P2REPEATREPEAT启动关门正常运行售票到站停开门UNTILFALSEUNTILFALSE司机启动车辆的动作必须与售票员关车门的动作取得同步,售票员开车门的动作也必须与司机停车取得同步。解:设信号量S1:是否允许司机启动汽车,初值为0信号量S2:是否允许售票员开门,初值为0Driver(){While(1){P(s1);启动汽车正常行车;到站停车;V(S2);}}Busman(){While(1){关车门;V(S1);售票P(S2);开车门;上下乘客;}}ints1=0;ints2=0;main(){CobeginDriver();Busman();Coend}3、桌上有一空盘,允许存放一只水果。爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取用,请用P,V原语实现爸爸,儿子女儿三个进程的同步。解:设三个信号量,S:表示盘子是否为空,初值为1So:表示盘中是否有桔子,初值为0Sa:表示盘中是否有苹果,初值为0;ints=1;intsa=0;intso=0;main(){Cobeginfather();son();daughter();Coend}father(){While(1){P(S);将水果放入盘中;If(放入的是桔子)v(So);Elsev(Sa);}}son(){While(1){P(So);从盘中取出桔子;v(S);吃桔子;}}daughter(){While(1){P(Sa);从盘中取出苹果;v(S);吃苹果;}}
本文标题:3进程同步与通信习题
链接地址:https://www.777doc.com/doc-5326021 .html