一、用 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 描述进程执行先后次序的前趋图 int f1=0; /*表示进程 P1 是否执行完成*/ int f2=0; /*表示进程 P2 是否执行完成*/ int f3=0; /*表示进程P3 是否执行完成*/ int f4=0; /*表示进程P4 是否执行完成*/ int f5=0; /*表示进程P5 是否执行完成*/ main() { cobegin P1( ); 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 生产者-消费者问题是最著名的进程同步问题
它描述了一组生产者向一组消费者提供产品,它们共享一个有界缓冲区,生产者向其中投放产品,消费者从中取得产品
生产者-消费者问题是许多相互合作进程的一种抽象
例如,在输入时,输入进程是生产者,计算进程是消费者;在