一、用P、V操作描述前趋关系
P1、P2、P3、P4、P5、P6为一组合作进程,其前趋图如图2.3所示,试用P、V操作描述这6个进程的同步
p23图2.3说明任务启动后P1先执行,当它结束后P2、P3可以开始执行,P2完成后P4、P5可以开始执行,仅当P3、P4、P5都执行完后,P6才能开始执行
为了确保这一执行顺序,设置5个同步信号量n、摄、f3、f4、g分别表示进程P1、P2、P3、P4、P5是否执行完成,其初值均为0
这6个进程的同步描述如下:图2.3描述进程执行先后次序的前趋图intf1=0;/*表示进程P1是否执行完成*/intf2=0;/*表示进程P2是否执行完成*/intf3=0;/*表示进程P3是否执行完成*/intf4=0;/*表示进程P4是否执行完成*/intf5=0;/*表示进程P5是否执行完成*/main(){cobeginP1();P2();P3();P4();P5();P6();coend}P1(){┇v(f1);v(f1):}P2(){p(f1);┇v(f2);v(f2);)P3(){p(f1);┇v(f3);}P4(){p(f2);┇v(f4);}P5(){p(f2);┇v(f5);}P6(){p(f3);p(f4);p(f5);┇}二、生产者-消费者问题p25生产者-消费者问题是最著名的进程同步问题
它描述了一组生产者向一组消费者提供产品,它们共享一个有界缓冲区,生产者向其中投放产品,消费者从中取得产品
生产者-消费者问题是许多相互合作进程的一种抽象
例如,在输入时,输入进程是生产者,计算进程是消费者;在输出时,计算进程是生产者,打印进程是消费者
因此,该问题具有很大实用价值
我们把一个长度为n的有界缓冲区(n>0)与一群生产者进程P1、P2、⋯、Pm和一群消费者进程C1、C2、⋯、Ck联系起来,如图2.4所示
假定这些生产者和消费者是互相