【操作系統】進程同步問題

1、桌上有一空盤,允許存放一隻水果。爸爸可向盤中放蘋果也可向盤中放桔子,兒子專等喫盤中的桔子,女兒專等喫盤中的蘋果。規定當盤空時一次只能放一隻水果供喫者取用,請用P、V原語實現爸爸、兒子、女兒三個併發進程的同步。

​​Semaphore S=1,Sa=0,So=0;
       Main()
       {  cobegin
            Father();
            Son();
            Daughter();
          Coend
       }
       Father()
       {
           While(1)
              {
                  wait(S);
                  將一個水果放入盤中; 
                  If (盤中是蘋果)  
                     signal(Sa);
                  Else   
                     signal(So);
                  Reading;
              }
       }
      Son()
      {
          While(1)
            {
               wait(So);
               從盤子中取下桔子;
               signal(S);
               喫桔子;
             }
       }
     Daughter()      {
          While(1)
            {
               wait(Sa);
               從盤子中取下蘋果;
               signal(S);
               喫蘋果;
             }
       }​​

 

2、

設公共汽車上,司機和售票員的活動分別是:

司機的活動:                   售票員的活動:

                   啓動車輛;                     關車門;

                   正常行車;                     售票;

                   到站停車;                     開車門;

   在汽車不斷地到站、停車、行駛過程中,這兩個活動有什麼同步關係?用信號量和P、V操作實現他們的同步。

售票員關車門後,司機纔可以啓動車輛;   司機到站停車後,售票員纔可以開車門.
Semaphore S1=0,S2=0;  S1:司機發出的信號;S2:售票員發出的信號。
       Main()
       {  cobegin
            Driver();
            Conductor();
          Coend
       }
       Driver()
       {   while(1)
            {
               Wait(S2);
               Start;
               Driving;
               Stop;
               Signal(S1);
             }
       }
       Conductor();
       {   while(1)
            {
               Close the door;
               Signal(S2);
               Sell the ticket;
               Wait(S1);
               Open the door;
             }
       }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章