操作系统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

}

 

posted @ 2022-04-11 20:14  YUYUUUU  阅读(86)  评论(0编辑  收藏  举报