用信号量及其PV操作处理实际问题
1.
semaphore empty=1;橘子精=0;糖=0;水=0;
Process product(){
While(true){
P(empty);
产生一个随机数s;代表这生产商供应哪种原料
If(s==0)V(橘子精);
If(s==1) V(水);
If(s==2) V(糖);
}
}
Process P1(){
While(true){
P(橘子精);
取走橘子精;
V(empty);
}
}
Process P2(){
while(true){
P(糖);
取走糖;
V(empty);
}
}
Process P3(){
while(true){
P(水);
取走水;
V(empty);
}
}
Coend
2.
semaphore b1full=0, b1empty=0, b2full=0, b2empty=0;
process R() {
输入信息写入缓冲区R1中;
v(b1full);
p(b1empty);
}
process C() {
p(b1full);
从B1中取出信息;
加工信息;
结果送去B2;
v(b1empty);
v(b2full);
p(b1empty);
}
process P() {
p(b1full);
从B2中取出信息进行打印;
v(b2empty);
}