利用信号量实现前驱关系
信号量也可以用来描述程序之间或者语句之间的前驱关系。
实现算法如下:
Semaphore a1=a2=b1=b2=c=d=e=0; //初始化信号量
S1(){
…;
V(a1);V(a2); //S1已经运行完成
}
S2(){
P(a1); //检查S1是否运行完成
…;
V(b1);V(b2);//S2已经运行完成
}
S3(){
P(a2); //检查S1是否已经运行完成
…;
V©; //S3已经运行完成
}
S4(){
P(b1); //检查S2是否已经运行完成
…;
V(d); //S4已经运行完成
}
S5(){
P(b2); //检查S2是否已经运行完成
…;
V(e); //S5已经运行完成
}
S6(){
P©; //检查S3是否已经运行完成
P(d); //检查S4是否已经运行完成
P(e); //检查S5是否已经运行完成
…;
}