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