43、現有3個生產者P1、P2、P3,他們都要生產橘子汁,每個生產者都已分別購得兩種不同的原料,待購齊第三種原料后就可配制成橘子汁裝瓶出售。有一供應商能源源不斷的供應糖、水、橘子精,但每次只拿出一種原料放入容器中供應給生產者。當容器中有原料時,需要這種原料的生產者可以取走,當容器空時供應商又可放入一種原料。假定:生產者p1已購得糖和水;生產者P2已購得水和橘子精; 生產者P3已購得糖和橘子精; 試用: (1)管程(2)信號量和P、V操作寫出供應商和3個生產者之間能正確同步的程序。
semaphore empty;
semaphore full;
semaphore 糖、水、橘子精;
cobegin
process produce(){
while(ture){
produce();
p(empty);
供應商往容器中放入一種物品;
if(物品是橘子精)
{V(P1);}
else if(物品是糖)
{V(P2);}
else
{V(P3);}
}
V(full);
}
coend
cobegin
process P1(){
p(full);
生產橘子汁;
V(empty);
}
coend
cobegin
process P2(){
p(full);
生產橘子汁;
V(empty);
}
coend
cobegin
process P3(){
p(full);
生產橘子汁;
V(empty);
}
coend
2.IPO問題:有多個輸入進程、多個處理進程和多個輸出進程。輸入進程把數據逐步輸入到一個有M個單位緩沖區B1上,經處理進程處理之后放到有N個單位的緩沖區B2上,由輸出進程進行輸出。
(1).這個問題有哪些進程?進程之間有什么樣的制約關系?
這個問題有輸入進程,處理進程,輸出進程;輸入進程把數據輸入之后存到緩沖區B1后,再經過處理進程處理之后放到B2緩沖區之后才能由輸出進程輸出。
(2).用信號量及PV操作寫出這些進程之間的同步算法。
1.輸入進程、處理進程、輸出進程,輸入進程把數據輸入之后存到緩沖區B1后,再經過處理進程處理之后放到B2緩沖區之后才能由輸出進程輸出。
semaphore B1;B1=M; /*B1可用的空緩存區*/
semaphore B2;B2=N; /*B2可用的空緩存區*/
semaphore mutex;mutex=1; /*同步信號*/
cobegin
process input(){
while(true){
p(mutex);
輸入;
B1--;
v(mutex);
}
}
process chuli(){
while(true){
p(mutex);
處理;
B1++;
B2--;
v(mutex);
}
}
process output(){
while(true){
p(mutex);
輸出;
B2++;
v(mutex);
}
}
coend