43、现有3个生产者P1、P2、P3,他们都要生产橘子汁,每个生产者都已分别购得两种不同的原料,待购齐第三种原料后就可配制成橘子汁装瓶出售。有一供应商能源源不断的供应糖、水、橘子精,但每次只拿出一种原料放入容器中供应给生产者。当容器中有原料时,需要这种原料的生产者可以取走,当容器空时供应商又可放入一种原料。假定:生产者p1已购得糖和水;生产者P2已购得水和橘子精; 生产者P3已购得糖和橘子精; 试用: (1)管程(2)信号量和P、V操作写出供应商和3个生产者之间能正确同步的程序。
Cemaphore 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(){
Process P2(){
Process P3(){
While(true){
while(true){
while(true){
P(橘子精);
P(糖);
P(水);
取走橘子精;
取走糖;
取走水;
V(empty);
V(empty);
V(empty);
}
}
}
}
}
}
Coend
原文:https://www.cnblogs.com/ljgljg/p/10826834.html