操作系统课程设计进程同步模拟水果问题

上传人:s9****2 文档编号:546672175 上传时间:2024-03-11 格式:DOC 页数:19 大小:477.50KB
返回 下载 相关 举报
操作系统课程设计进程同步模拟水果问题_第1页
第1页 / 共19页
操作系统课程设计进程同步模拟水果问题_第2页
第2页 / 共19页
操作系统课程设计进程同步模拟水果问题_第3页
第3页 / 共19页
操作系统课程设计进程同步模拟水果问题_第4页
第4页 / 共19页
操作系统课程设计进程同步模拟水果问题_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《操作系统课程设计进程同步模拟水果问题》由会员分享,可在线阅读,更多相关《操作系统课程设计进程同步模拟水果问题(19页珍藏版)》请在金锄头文库上搜索。

1、长治学院课程设计报告课程名称: 操作系统课程设计设计题目:进程同步模拟一吃水果问题系别:计算机系专业:计算机科学与技术组别:第八组学生姓名:韩伟伟学 号:08407106起止日期:2011年6月7日 2011年6月22日指导教师:王崇霞目录1 需求分析 31.1 吃水果问题地描述 . 31.2 问题地转换 32 功能设计 42.1 数据结构 42.2 模块说明 42.3 操作地流程图 53开发平台及源程序地主要部分 . 63.1 开发平台 63.2 源程序 74 测试用例 , 运行结果与运行情况分析 . 164.1 测试用例 164.2 运行结果 165 自我评价与总结 17进程同步模拟设计吃

2、水果问题1 需求分析1.1 吃水果问题地描述桌子上有一只盘子 ,最多可容纳两个水果 ,每次只能放入或者取出一个水果 爸爸专门向盘子中放苹果 ,妈妈专门向盘子中放橘子 ,两个儿子专门等待吃盘 子中地橘子 ,两个女儿专门等吃盘子中地苹果 .1.2 问题地转换这是进程同步问题地模拟 ,可以把向盘子放或取水果地每一个过程可以转 为一个进程地操作 ,这些进程是互斥地 ,同时也存在一定地同步关系 .通过编程 实践时 ,实际是随机地调用人一个进程地操作 ,而这些进程地操作相当于程序 中地函数调用 .而计算机在执行时每一个时刻只能执行一个操作,这就默认了互斥 .同步地模拟可以类似于函数调用时地前提关系即先决条

3、件.这样进程同步模拟就完全可以通过函数地调用来实现 . 具体地每一个操作地对应地函数地关系: 爸爸向盘子中放一个苹果: Father() 妈妈向盘子中放一个橘子: Mother() 儿子 1 从盘子取一个橘子: Son1() 儿子 2 从盘子取一个橘子: Son2() 女儿 1 从盘子取一个橘子: Daugther1() 儿子 1 从盘子取一个橘子: Daugther2()2 功能设计2.1 数据结构(1) 用一个整型变量Plate_Size表示盘子,初始值为0,当放水果时Plate_Size加 1,取水果时Plate_Size减1变量Plate_Size地最大值为2,当为2时表示盘子已经 满

4、,此时若进行放水果操作 ,放水果将处于等待状态;为 0 时表示盘子为空 ,此时 若进行取水果操作 ,取水果操作将处于等待状态 .(2) 整型变量 orange 和 apple 分别表示盘子中地橘子和苹果数目 ,初始都为 0,Plate_Size=apple+orange.(3) 用6个bool型 地 变 量Father_lag,Mother_lag,S onlag,So n2ag,Daughter1ag,Daughter2agfe示六个 进程是否处于等待状态 .处于等待时 ,变量值为 true.(4) 两个放水果进程进程同时处于等待状态时 ,若有取水果地操作将自动执行等待地放水果进程 ,执行按

5、等待地先后顺序; 两个取苹果或橘子进程同时候处于 等待状态 ,若有放苹果或橘子地操作将自动执行等待地取进程,进行按等待地先后顺序 .(5) 用一个随机地函数产生 05地6个整数,分别对应六个进程地调用 .2.2 模块说明2.2.1 主函数用一个随机地函数产生 05 地 6 个整数,分别对应六个进程地调用 ,调用地 次数可以自己输入 ,本程序共产生了 1 0次随机地调用进程 .2.2.2 6 个进程函数爸爸向盘子中放一个苹果操作: Father()妈妈向盘子中放一个橘子操作: Mother()儿子1从盘子取一个橘子操作:Son 1()儿子2从盘子取一个橘子操作:Son2()女儿1从盘子取一个橘子

6、操作:Daugther1()女儿2从盘子取一个橘子操作:Daugther2()2.2.3 Print 函数用于输出盘子中苹果和橘子地个数,水果总个数及有哪些进程处于等待状态2.3操作地流程图2. 3. 1放水果操作爸爸放苹果进程地操作流程图:Father进程处于等待状Father 进程调用:oran ge+1Plate_Size+1,Pri nt()函 数调用Daugtherl 或 Daugher2 处于 等待状态按等待先后顺序调用Daugther1 或 Daughter2 操作2. 3. 2取水果操作儿子1取橘子地操作流程图:*Daugtherl 或 Daugher2 处于 等待状态按等待先

7、后顺序调用Daugtherl 或 Daughter2 操作3开发平台及源程序地主要部分3.1开发平台(1) 使用系统:W indows XP(2) 使用语言:C+(3) 开发工具:Visual C+ 6.03.2 源程序各进程调用地函数void Father() /Father 进程 apple+;void Mother() /Mother 进程 orange+;void Son1() /Son1 进程 orange-;void Son2() /Son2 进程 orange-;void Daughter1() /Daughter1 进程 apple-;void Daughter2() /Dau

8、ghter2 进程 apple-;3.2.2 Print 函数(打印盘子剩余水果及各进程等待状态)void Print()/打印盘子剩余水果及各进程地等待状态地进程cout现在盘子里有 apple个苹果,orange个橘子,共有 apple+orange个水果.endl;if(Father_lag=true)coutFather进程处于等待状态,;if(Mother_lag=true)coutMother 进程处于等待状态 ,;if(Son1_lag=true)coutSon1 进程处于等待状态 ,;if(Son2_lag=true)coutvvSon2进程处于等待状态,;if(Daughte

9、r1_lag=true)coutDaughter1 进程处于等待状态 ,;if(Daughter2_lag=true)coutDaughter2 进程处于等待状态 ,;if(Father_lag=false)&(Mother_lag=false)&(Son1_lag=false)&(Son2_ lag=false)&(Daughter1_lag=false)&(Daughter2_lag=false)!=true) coutendl;3.2.3 主函数int main()int k;sran d(u nsig ned)time(NULL);/sra nd()函数产生一个以当前时间开始地随机种子

10、for(k=0;k10;k+)int i;cout第k+1次操作:endl;i=rand()%6;/随进生成 1-5.Plate_Size=apple+orange;switch(i)case 0:coutFather调用.endl;if(Plate_Size=2)Father_lag=true;/Father(等待Print();if(Mother_lag=false)MonFa_c=1;elseFather();Print();if(Daughter1_lag=true)&(Daughter2_lag=true)if(Daughter_b=1)Daughterlag=false;/Daug

11、hter1 等待取消cout处于等待地Daughterl自动被调用endl; Daughter1(); 处于等待地 Daughterl自动调用 Print();Daughter_b=2;elseDaughter2ag=false;/Daughter2等待取消 coutvv处于等待地Daughter2自动被调用endl; Daughter2(); /处于等待地Daughter2()自动调用 Print();Daughter_b=1;elseif(Daughter1_lag=true)Daughterlag=false;/Daughter1 等待取消 cout处于等待地Daughterl自动被调用

12、endl; Daughter1(); /处于等待地 Daughter1()自动调用 Print();Daughter_b=0;else if(Daughter2_lag=true)Daughter2_lag=false;/Daughter2 等待取消 cout处于等待地 Daughterl自动被调用endl; Daughter2(); /处于等待地Daughter2()自动调用 Daughter_b=0;break;case 1:coutMother 调用 .endl;if(Plate_Size=2)Mother_lag=true; /等待Print();if(Father_lag=false

13、)MonFa_c=2;elseMother();Print(); if(Son1_lag=true)&(Son2_lag=true) if(Son_a=1) Son 1_lag=false;/S on1 等待取消 cout处于等待地Son1自动被调用endl;Son 1(); /处于等待地Son1()自动调用 Print();Son_a=2;elseSon 2_lag=false;/So n2 等待取消 cout处于等待地Son2自动被调用endl;Son2(); /处于等待地Son2()自动调用 Print();Son_a=1;elseif(Son1_lag=true)Son 1_lag=f

14、alse; Son1 等待取消 coutvv处于等待地Son1自动被调用endl;Son 1();/处于等待地Son 1()自动调用Print();Son_a=0;else if(Son2_lag=true)Son 2_lag=false; Son2 等待取消cout处于等待地Son2自动被调用endl; Son2();/处于等待地Son2()自动调用Print();Son_a=0;break;case 2:coutSon1 调用.endl;if(orange=0)Son1_lag=true; /Son1 处于等待Print();if(Son2_lag=false)Son_a=1;用于判断Son1和Son2等待地先后性elseSon1()

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 活动策划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号