桌上有一个空盘,允许存放一只水果。爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿三个并发
桌上有一个空盘,允许存放一只水果。爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿三个并发进程的同步。
semaphore empty=1,mutex=1,apple=0,orange=0; //为四个信号量赋初值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() { cobeginfather();son();daugther();coend
}

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
