进程通讯P,V操作热身题:1、设有两个优先级相同的进程P1,P2如下,令信号量S1,S2的初值为0,试问P1,P2并发运行结束后x=?y=?z=?进程P1进程P2y=y+1;x=x+1;y=y+2;x=x+1;V(S1);P(S1);z=y+1;x=x+y;P(S2);V(S2);y=z+y;z=x+z;解:进程P1进程P2y=y+1;x=x+1;y=y+2;y=3x=x+1;x=2V(S1);S1=1P(S1);S1=-1------0z=y+1;z=4x=x+y;x=5P(S2);S2=-1-------0V(S2);S2=1y=z+y;y=12z=x+z;z=92、下面是两个并发执行的进程,它们能正确执行吗?若不能,请说明错误的原因,并改正之。intx;main(){P1();P2();}ProcessP1(){inty,z;x=1;y=0;ifx1y=y+1;z=y;}ProcessP2(){intt,u;x=0;t=0;ifx1t=t+2;u=t;}修改如下:intx;intmutex=1;main(){P1();P2();}ProcessP1(){inty,z;y=0;P(mutex);x=1;ifx1y=y+1;V(mutex);z=y;}ProcessP2(){intt,u;t=0;P(mutex);x=0;ifx1t=t+2;V(mutex);u=t;}3.设Pa,Pb,Pc为一组合作进程,其进程流程图如下所示。试用信号灯的P、V操作实现这三个进程的同步。intsb=0;intsc=0;main(){Pa();SFPaPbPcPb();Pc();}Pa(){….V(sb);V(sc);}Pb(){P(sb);…}Pc(){P(sc);…}PV操作例题例1:某游艺场设置了一个自动计数系统,用计数器count表示在场的人数。若有一个人进入游艺场,进程Pin对count加1,当退出一个人时,进程Pout对count减1。由于进出游艺场的人是随机的,所以进程Pin和Pout的执行是并发的。试用P,V操作来实现游艺场在场人数的正确管理。intcount=0;//计数器初始化intS=1;//对计数器count的修改权限main(){Pin();//进入游艺场进程Pout();//退出游艺场进程}ProcessPin(){intR1=0;P(S);R1=count;R1=R1+1;count=R1;V(S);}ProcessPout(){intR2=0;P(S);R2=count;R2=R2-1;count=R2;V(S);}例2:在一个只允许单向行使的十字路口,分别有若干由东到西、由南到北的车辆在等待通过。为了安全,每次只允许一辆车通过,当有车辆通过时其他车辆必须等候。请用信号量的P,V操作设计一个十字路口安全行使的自动管理系统。intS=1;//可否通过十字路口Main(){Pew();//由东到西的车辆通行进程Psn();//由南到北的车辆通行进程}ProcessPew(){P(S);由东到西通过十字路口;V(S);}ProcessPsn(){P(S);由南到北通过十字路口;V(S);}例3:设有一个机票订购系统有n个售票处,每个售票处通过网络终端访问系统的公共数据区,假定公共数据区中的一些单元Aj(j=1,2,…..)分别存放各次航班的余票数。售票时,若某次航班还有余票,则售给乘客;否则,拒绝售票。请用P,V操作实现各售票进程的并发执行。intS=1;//可否修改公共数据区Main(){Pi(i=1,2,….,n);//各售票处的售票处理进程}ProcessPi(i=1,….,n){intRi=0;//各进程执行时所用的工作单元P(S);Ri=Aj;if(Ri1){Ri=Ri-1;Aj=Ri;V(S);输出一张票;}else{V(S);输出“票已售完”信息}}例4:有三个进程PA,PB,PC,合作解决文件打印问题:PA将文件记录从磁盘读入内存的缓冲区1,每执行一次读一个记录;PB将缓冲区1的记录复制到缓冲区2,每执行一次复制一个记录;PC打印缓冲区2中的记录,每执行一次打印一个记录。每个缓冲区只能存放一个记录。请用P,V操作实现文件的正确打印。intempty1=1;//缓冲区1的空闲空间数intempty2=1;//缓冲区2的空闲空间数intfull1=0;//缓冲区1的满空间数intfull2=0;//缓冲区2的满空间数main(){PA();PB();PC();}ProcessPA(){While(打印工作还没有结束){P(empty1);将一个记录存入缓冲区1;V(full1);}}ProcessPB(){While(打印工作还没有结束){P(full1);从缓冲区1取出一个记录;V(empty1);P(empty2);将记录存入缓冲区2;V(full2);}}ProcessPC(){While(打印工作还没有结束){P(full2);从缓冲区2取出一个记录;V(empty2);将记录打印输出;}}例5:桌上有一个空盘子,只允许放一只水果。爸爸向盘中放苹果,妈妈向盘中放橘子,规定儿子只能吃橘子,女儿只能吃苹果。试用P,V操作实现他们能同步的程序。(上海交通大学)intSp=1;//盘中的空闲空间数intSo=0;//盘中的橘子数intSa=0;//盘中的苹果数main(){Pf();Pm();Ps();Pd();}ProcessPf(){P(Sp);将苹果放入盘中;V(Sa);}ProcessPm(){P(Sp);将橘子放入盘中;V(So);}ProcessPs(){P(So);吃盘中的橘子;...