【操作系统】进程同步问题

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;
             }
       }

 

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