1. 程式人生 > 其它 >作業系統2022-4-11(2)

作業系統2022-4-11(2)

第二題:

桌子上有一個空盤子,只允許存放一隻水果。爸爸可以向盤中放蘋果,也可以放橘子; 女兒專門吃盤子中的蘋果,兒子專門吃盤子中的橘子。

規定當盤子空的時候一次只能放一隻水果,請用記錄型訊號量機制實現他們之間的同步與互斥。

 

semaphore empty=1,mutex=1,apple=0,orange=0;  

/*

為四個訊號量賦初值

metux表示:父親、兒子和女兒程序對盤子的互斥使用;



empty表示:盤子是否為空;



apple表示:是否可以取蘋果;



orange表示:是否可以取桔子 

*/

void father(){//父親程序

     do{

           wait(empty);    
//等待盤子為空 wait(mutex); //等待獲取對盤子的操作 爸爸向盤中放一個蘋果或者桔子; signal(mutex); //釋放對盤子的操作 if(apple){ signal(apple); //盤中有一個蘋果 }else{ signal(orange);// 盤中有一個橘子 } }while(true); }
void son(){ //兒子程序吃橘子 do{ wait(orange); //判斷盤子中是否有橘子 wait(mutex); //等待獲取對盤子的操作 兒子取出盤中的橘子; signal(mutex); //釋放對盤子的操作 signal(empty); //釋放盤子空間 }while(TRUE); } void daugther(){ //女兒程序吃蘋果 do
{ wait(apple); //判斷盤子中是否有蘋果 wait(mutex); //等待獲取對盤子的操作 女兒取出盤中的蘋果; signal(mutex);//釋放對盤子的操作 signal(empty);//釋放盤子空間 }while(TRUE); } void main() { cobegin father(); son(); daugther(); coend }