操作系统: 桌子上有一只盘子,盘子中只能放一只水果。爸爸专向盘子中放苹果,妈妈专向盘子中放 橘子,一个儿子专等吃盘子中的橘子,一个女儿专等吃盘子中的苹果。用PV操作实现他们 之间的同步机制。

您所在的位置:网站首页 同步互斥算法例题吃水果问题 操作系统: 桌子上有一只盘子,盘子中只能放一只水果。爸爸专向盘子中放苹果,妈妈专向盘子中放 橘子,一个儿子专等吃盘子中的橘子,一个女儿专等吃盘子中的苹果。用PV操作实现他们 之间的同步机制。

操作系统: 桌子上有一只盘子,盘子中只能放一只水果。爸爸专向盘子中放苹果,妈妈专向盘子中放 橘子,一个儿子专等吃盘子中的橘子,一个女儿专等吃盘子中的苹果。用PV操作实现他们 之间的同步机制。

2023-11-05 10:23| 来源: 网络整理| 查看: 265

  操作系统:进程的同步与互斥练习  

     桌子上有一只盘子,盘子中只能放一只水果。爸爸专向盘子中放苹果,妈妈专向盘子中放橘子,

      一个儿子专等吃盘子中的橘子,一个女儿专等吃盘子中的苹果。用PV操作实现他们之间的同步机制。

 

分析设计四个信号量metux,empty、apple、orange;

metux表示:爸爸、妈妈、儿子和女儿进程对盘子的互斥使用;

empty表示:盘子是否为空;

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

orange表示:是否可以取桔子。

算法描述如下:

semaphore empty=1,nutex=1,apple=0,orange=0; //为四个信号量赋初值 void father(){      do{            wait(empty); //等待盘子为空            wait(metux); //等待获取对盘子的操作             爸爸向盘中放一个苹果;            signal(mutex); //释放对盘子的操作            signal(apple); //通知女儿可以来盘子中取苹果     }while(TRUE); } void mather(){ //与父亲进程雷同      do{            wait(empty);            wait(metux);             妈妈向盘中放一个桔子;            signal(mutex);            signal(orange);     }while(TRUE); } void son(){      do{            wait(orange); //判断盘子中是否有桔子            wait(metux); //等待获取对盘子的操作             儿子取出盘中的桔子;            signal(mutex); //释放对盘子的操作            signal(empty); //盘子空了,可以继续放水果了     }while(TRUE); } void daugther(){ //与儿子进程雷同      do{            wait(apple);            wait(metux);             女儿取出盘中的苹果;            signal(mutex);            signal(empty);     }while(TRUE); } void main() { //四个并发进程的同步执行 cobegin father();mather();son();daugther(); coend }

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3