1、 x=1; y=0; if x1 y=y+1; z=y;Process P2() int t,u; x=0; t=0; if x1 t=t+2; u=t;3. 设Pa, Pb, Pc为一组合作进程,其进程流程图如下所示。试用信号灯的P、V操作实现这三个进程的同步。例1:某游艺场设置了一个自动计数系统,用计数器count表示在场的人数。若有一个人进入游艺场,进程Pin对count加1,当退出一个人时,进程Pout对count减1。由于进出游艺场的人是随机的,所以进程Pin 和Pout的执行是并发的。试用P,V操作来实现游艺场在场人数的正确管理。 int count=0; /计数器初始化 int
2、S=1; /对计数器count的修改权限 Pin(); /进入游艺场进程 Pout(); /退出游艺场进程Process Pin() int R1=0; P(S); R1=count; R1=R1+1; Count=R1; V(S);Process Pout() int R2=0; R2=count; R2=R2-1; Count=R2;例2:在一个只允许单向行使的十字路口,分别有若干由东到西、由南到北的车辆在等待通过。为了安全,每次只允许一辆车通过,当有车辆通过时其他车辆必须等候。请用信号量的P,V操作设计一个十字路口安全行使的自动管理系统。 /可否通过十字路口 Pew(); /由东到西的车
3、辆通行进程Psn(); /由南到北的车辆通行进程Process Pew() 由东到西通过十字路口;Process Psn() 由南到北通过十字路口;例3:设有一个机票订购系统有n个售票处,每个售票处通过网络终端访问系统的公共数据区,假定公共数据区中的一些单元Aj(j=1,2,.)分别存放各次航班的余票数。售票时,若某次航班还有余票,则售给乘客;否则,拒绝售票。请用P,V操作实现各售票进程的并发执行。 /可否修改公共数据区 Pi (i=1,2,.,n); / 各售票处的售票处理进程Process Pi(i=1,.,n) int Ri=0; /各进程执行时所用的工作单元 Ri=Aj; if( Ri
4、1) Ri=Ri-1; Aj=Ri; 输出一张票; elseV(S);输出“票已售完”信息例4:有三个进程PA,PB,PC,合作解决文件打印问题:PA将文件记录从磁盘读入内存的缓冲区1,每执行一次读一个记录;PB将缓冲区1的记录复制到缓冲区2,每执行一次复制一个记录;PC打印缓冲区2中的记录,每执行一次打印一个记录。每个缓冲区只能存放一个记录。请用P,V操作实现文件的正确打印。int empty1=1; /缓冲区1的空闲空间数int empty2=1; /缓冲区2的空闲空间数int full1=0; /缓冲区1的满空间数int full2=0; /缓冲区2的满空间数PA();PB();PC()
5、;Process PA() While(打印工作还没有结束)P(empty1);将一个记录存入缓冲区1;V(full1);Process PB()P(full1);从缓冲区1取出一个记录;V(empty1);P(empty2);将记录存入缓冲区2;V(full2);Process PC()P(full2);从缓冲区2取出一个记录;V(empty2);将记录打印输出;例5:桌上有一个空盘子,只允许放一只水果。爸爸向盘中放苹果,妈妈向盘中放橘子,规定儿子只能吃橘子,女儿只能吃苹果。试用P,V 操作实现他们能同步的程序。int Sp=1; /盘中的空闲空间数int So=0; /盘中的橘子数int
6、Sa=0; /盘中的苹果数Pf();Pm();Ps();Pd();Process Pf() P(Sp); 将苹果放入盘中; V(Sa);Process Pm() 将橘子放入盘中; V(So);Process Ps() P(So); 吃盘中的橘子; V(Sp);Process Pd() P(Sa); 吃盘中的苹果;例6:有一个阅览室,共有200个座位,读者进入时必须先在一张登记表上登记,该表为每一座位列一表目,包括座号和读者姓名等,读者离开时要消掉登记的信息,试问: (1)为描述读者的动作,应编写几个程序,设置几个进程? (2)试用PV操作描述读者进程之间的同步关系。 (1)应编写登记程序、消掉
7、登记程序,设置登记进程和消掉进程。(2)设三个信号量 Mutex 互斥信号量 初值 1 Empty 空座的个数 同步信号量 初值 200 Full 满座的个数 同步信号量 初值 0 int Mutex=1; /可否修改座位数的权限int Empty=200; /空座的个数int Full=0; /满座的个数Pin(); /登记进程Pout(); /消掉进程 P(Empty) P(Mutex) 在登记表上登记 V(mutex) V(full)P(full) P(mutex)在登记表上消掉登记V(mutex)V(empty)例7:医生为病人看病,需要化验,于是医生开出化验单,病人到化验室化验,化验
8、结果送回医生处供医生诊断。医生看病为一个进程,化验室化验为一个进程,二者并发执行且需要交换信息。 请回答下列问题:(1)用PV操作管理这些并发进程时,应怎样定义信号量,写出信号量的初值及含义。(2)根据所定义的信号量,把应执行的PV操作过程写出来,以保证进程能够正确地并发执行。.(1)因为医生看病诊断进程和化验室化验进程之间为同步关系。所以定义两个信号量S1和S2,S1表示有无化验单,S2表示有无化验结果。初始值均为0。 (2)应执行的PV操作过程如下:main( ) int S1=0; /表示有无化验单int S2=0; /表示有无化验结果Labora( ); /化验进程Diagnosis(
9、 ); /诊断进程 Labora( ) while(化验工作未结束) P(S1); /询问有无化验单,若无则等待 化验工作 /送出化验结果Diagnosis( ) while (看病工作未结束) 看病 /送出化验单 /等化验结果 Diagnosis /诊断例8:在一个盒子里,混装了数量相等的围棋白子和黑子,现在要用自动分拣系统把白子和黑子分开。该系统设有两个进程P1和P2,其中P1拣白子,P2拣黑子。规定每个进程每次只拣一子,当一进程正在拣子时,不允许另一个进程去拣,当一进程拣了一子时,必须让另一进程去拣,试写出两个并发进程能正确执行的算法。main() int S1=1; /进程P1的私有信
10、号量,初始值为1 /进程P1的私有信号量,初始值为0 int n=1000;/围棋所有黑子和白子总数 while(n!=0) P1(); /拣白子进程P2(); /拣黑子进程P1( ) p(S1); 拣白子; n=n-1 )P2() p(S2); 拣黑子; n=n-1;9、桌上有一只盘子,最多可容纳两个水果。每次只能放入一个或取出一个水果。爸爸专向盘中放苹果,妈妈专向盘中放橘子,两个女儿专等吃盘中的苹果,两个儿子专等吃盘中的橘子。试用P、V操作写出他们能同步与互斥的程序。(南京大学) Int S=1; / 是否可以更改盘子内的空间数 Int empty=2; / 盘子内的初始空间数 Int S
11、a=0; / 盘中是否有苹果Int So=0; / 盘中是否有橘子Pf( );Pm( );Pd_i( );Ps_j( );Pf( ) P(empty);P(S); 向盘中放苹果;Pm( ) 向盘中放橘子;Pd_i( ) 取盘中的苹果; V(empty);Ps_j( ) 取盘中的橘子;10、某寺庙,有小和尚、老和尚若干。有一水缸,由小和尚提水入缸,老和尚从缸中取水饮用。水缸可容纳10桶水,水取自同一水井中,水井径窄,每次只能容一个水桶取水。水桶总数为3个,每次入、取缸水仅为1桶,且不可同时进行。试给出取水、入水的算法描述。(北京邮电大学)Main( ) Int mutex1=1; /是否可以使用
12、水井 Int mutex2=1; /是否可以使用水缸 Int mutex3=1; /是否可以修改水桶个数 Int empty=10; /水缸初始空间数 Int full=0; /水缸满否 Int count=3; /水桶初始个数 Pin_i( ); /入水进程 Pout_j( ); /取水进程Pin_i( ) /水缸满否?满则阻塞入水进程 P(count); /申请打水的桶 P(mutex3); 拿水桶; V(mutex3);P(mutex1); /互斥使用水井从井中取水V(mutex1);P(mutex2); /互斥使用水缸向缸中入水V(mutex2);V(full); /水缸多了一桶水V(
13、count); /归还水桶Pout_j( ) P(full); 水缸是否有水?无则阻塞取水进程 /申请取水的桶 P(mutex2); 从缸中取水 V(mutex2); /水缸少了一桶水 V(count);11、有一个理发师,有n张可供顾客等待理发的椅子,如果没有顾客,则理发师睡觉;如果有一顾客进入理发店发现理发师在睡觉,则把他叫醒进行理发,如果理发师正在理发时又有顾客来到,若有空椅子,就在空椅子上等待,若没有空椅子就离开理发店。写一个算法描述理发师和顾客之间的关系。要求不能带有竞争条件。(西安电子科技大学) Int mutex=1; /可否修改顾客数 Int wakeup=0; /理发师等唤醒的信号 Int wait=0; /顾客是否可以等待 Int rc=0; /初始顾客数 P1( ); /顾客进程 P2( ); /理发师进程P1( ) P(mutex); rc=rc+1; if (rc=1) /如果是第一个顾客就唤醒理发师V(wakeup); else if (rcn和mn,每个进程最多可申请多少个这类资源而使系统一定不会发生死锁?
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1