用信號量及其PV操作處理實際問題


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       

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM