欢迎来到天天文库
浏览记录
ID:6339731
大小:37.50 KB
页数:2页
时间:2018-01-10
《进程同步互斥练习》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1.如果信号量S的初值是5,现在信号量的值是-5,那么系统中的相关进程至少执行了几个P(S)操作?与信号量S相关的处于阻塞状态的进程有几个?为使信号量S的值大于0,应进行怎样的操作?答案:1)5-(-5)=10,因此系统中的相关进程至少执行了10个P(S)操作。因为每执行一次P(S)操作就会将信号量S减去1。2)与信号量S相关的处于阻塞状态的进程有
2、-5
3、=5个。3)为使信号量S的值大于0,应当有至少6个执行了P(S)但还没来得及执行V(S)的进程去执行V(S)操作。2.一售票厅只能容纳300人,当少于300人时,可以进入;否则,需在外等候。若将每一个购票者作为一个
4、进程,请用P、V操作编程,并写出信号量的初值。答案:设置信号量NUM表示售票厅当前还可以进入的人数,初值为300.购票者进程:do{P(NUM);进入售票厅;V(NUM);}While(1);3.桌上有一空盘,只允许存放一个水果。爸爸可向盘中放苹果,也可向盘中放桔子。儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘中空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿三个并发进程的同步。答案:设置三个信号量S、So、Sa,信号量S表示盘子是否为空,其初值为1;信号量So表示盘中是否有桔子,其初值为0;信号量Sa表示盘中是否有苹果,其初值为0。同步
5、描述如下:intS=1;intSa=0;intSo=0;main(){father();son();daughter();}father(){while(1){P(S);将水果放入盘中;if(放入的是桔子)V(So);elseV(Sa);}}son(){while(1){P(So);从盘中取出桔子;V(S);吃桔子;}}daughter(){while(1){P(Sa);从盘中取出苹果;V(S);吃苹果;}}4.下面是两个并发执行的进程。它们能正确执行吗?若不能,试改正之。CobeginVarx:integer;ProcessP1Vary,z:integer;Beg
6、inx:=1;y:=0;Ifx≥1theny:=y+1;z:=y;End;ProcessP2Vart,u:integer;Beginx:=0;t:=0;Ifx<1thent:=t+2;u:=t;End;Coend答案:改正后的代码cobeginvarx:integer;S;semaphore;S:=1;ProcessP1Vary,z:integer;BeginP(S);x:=1;y:=0;Ifx≥1theny:=y+1;V(S);z:=y;endProcessP2vart,u:integer;beginP(S);x:=0;t:=0;Ifx<1thent:=t+2;V
7、(S);u:=t;EndCoend书上:3(6)有k个进程共享一临界区,说明信号的初值及含义,用P、V操作写出互斥算法1)一次只允许一个进程进入临界区。2)一次允许K个进程进入临界区。答案:1)设信号量M表示当前可进入临界区的进程数,初值为1.进程{…P(M);进入临界区;V(M);….}2)设信号量M表示当前可进入临界区的进程数,初值为K.进程{….P(M);进入临界区;V(M);…}或者:进程{…进入临界区;…}
此文档下载收益归作者所有