桌上有一空盘,最多允许存放一只水果。爸爸只向盘中放一个苹果,妈妈只向盘中放一个桔子,儿子专等吃盘中的桔子,女儿专等吃苹果。用wait、signal操作实现爸爸、妈妈、儿子、女儿四个并发进程的同步。
分析设计四个信 量metux,empty、apple、orange;
metux表示:爸爸、妈妈、儿子和女儿进程对盘子的互斥使用;
empty表示:盘子是否为空;
apple表示:是否可以取苹果;
orange表示:是否可以取桔子。
算法描述如下:
[html] view plain copy
- 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
- }
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!