




免费预览已结束,剩余15页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
沈阳理工大学课程设计专用纸 1 目目 录录 1 题目内容及要求题目内容及要求 2 1 1题目名称 2 1 2题目描述 2 1 3解题思路 2 1 4程序清单 6 1 5提交结果框图 16 2 总结总结 20 3 参考文献参考文献 20 沈阳理工大学课程设计专用纸 2 1 题目内容及要求题目内容及要求 1 1 题目名称题目名称 进程同步模拟设计 吃水果问题 1 2 题目描述题目描述 桌子上有一只盘子 最多可容纳两个水果 每次只能放入或者取出一个 水果 爸爸专门向盘子中放苹果 妈妈专门向盘子中放橘子 两个儿子专门 等待吃盘子中的橘子 两个女儿专门等吃盘子中的苹果 1 3 解题思路解题思路 将问题转换为信号量上的资源分配类型问题 这是进程同步问题的模拟 可以把向盘子放或取水果的每一个过程可以 转为一个进程的操作 这些进程是互斥的 同时也存在一定的同步关系 通 过编程实践时 实际是随机的调用人一个进程的操作 而这些进程的操作相 当于程序中的函数调用 而计算机在执行时每一个时刻只能执行一个操作 这就默认了互斥 同步的模拟可以类似于函数调用时的前提关系即先决条件 这样进程同步模拟就完全可以通过函数的调用来实现 具体的每一个操作的对应的函数的关系 爸爸向盘子中放一个苹果 Father 妈妈向盘子中放一个橘子 Mother 儿子 1 从盘子取一个橘子 Son1 儿子 2 从盘子取一个橘子 Son2 女儿 1 从盘子取一个苹果 Daugther1 儿子 1 从盘子取一个苹果 Daugther2 沈阳理工大学课程设计专用纸 3 具体实现方案 1 用一个整型变量 Plate Size 表示盘子 初始值为 0 当放水果时 Plate Size 加 1 取水果时 Plate Size 减 1 变量 Plate Size 的最大值为 2 当为 2 时表示盘子已经满 此时若进行放水果操作 放水果将处于等待状 态 为 0 时表示盘子为空 此时若进行取水果操作 取水果操作将处于等待状 态 2 整型变量 orange 和 apple 分别表示盘子中的橘子和苹果数目 初始都 为 0 Plate Size apple orange 3 用 6 个 bool 型的变量 Father lag Mother lag Son1 lag Son2 lag Daughter1 lag Daughter2 lag 表示六个进程是否处于等待状态 处于等待时 变量值为 true 4 两个放水果进程进程同时处于等待状态时 若有取水果的操作将自动执 行等待的放水果进程 执行按等待的先后顺序 两个取苹果或橘子进程同时候 处于等待状态 若有放苹果或橘子的操作将自动执行等待的取进程 进行按等 待的先后顺序 5 用一个随机的函数产生 0 5 的 6 个整数 分别对应六个进程的调用 沈阳理工大学课程设计专用纸 4 放水果操作流程图设计 以 Father 为例 Mother 类似 否 Father 操作 Plate Size 2 否 Daugther1 或 Daugher2 处 于等待状态 是 按等待先后顺序调用 Daugther1 或 Daughter2 操作 是 Father 进程处于等待状 态 Father 进程调用 apple 1 Plate Size 1 Print 函数调用 返回 图 1 Father 放水果操作流程图 沈阳理工大学课程设计专用纸 5 取水果操作流程图设计 以 Son 为例 Daughter 类似 Son 操作 orange 0 否 否 Father 或 Mother 处于等待 状态 是 按等待先后顺序调用 Father 或 Mother 操作 是 Son 进程处于等待状态 Son 进程调用 orange 1 Plate Size 1 Print 函数调用 返回 图 2 Son 取水果 橘子 操作流程图 沈阳理工大学课程设计专用纸 6 1 4 程序清单程序清单 include include include include int apple 0 int orange 0 bool Father lag bool Mother lag bool Son1 lag bool Son2 lag int son a int Daughter b bool Daughter1 lag bool Daughter2 lag void Print cout 现在盘子里有 apple 个苹果 orange 个橘子 共有 apple orange 个水果 endl if Father lag true cout Father 进程处于等待状态 endl if Mother lag true cout Mother 进程处于等待状态 endl if Son1 lag true cout Son1 进程处于等待状态 endl if Son2 lag true cout Son2 进程处于等待状态 endl if Daughter1 lag true cout Daughter1 进程处于等待状态 endl if Daughter2 lag true cout Daughter2 进程处于等待状态 endl if Father lag false void Father Father 进程 apple Print void Mother Mother 进程 orange 沈阳理工大学课程设计专用纸 7 Print void Son1 Son1 进程 orange Print void Son2 Son2 进程 orange Print void Daughter1 Daughter1 进程 apple Print void Daughter2 Daughter2 进程 apple Print void main int i int Plate Size 水果数量 int MonFa c 用于爸爸妈妈等待次序的区别 int Son a 用于两个儿子等待次序的区别 int daughter b 用于两个女儿等待次序的区别 int k 产生进程调用的数量 srand unsigned time NULL srand 函数产生一个以当前时间开始的随机种子 for k 0 k 10 k cout endl cout 第 k 1 次操作 endl i rand 6 随进生成 1 5 Plate Size apple orange switch i case 0 cout Father 调用 endl 沈阳理工大学课程设计专用纸 8 if Plate Size 2 Father lag true Father 等待 Print if Mother lag false MonFa c 1 else Father if Daughter1 lag true Daughter1 等待取消 cout 处于等待的 Daughter1 自动被调 用 endl Daughter1 处于等待的 Daughter1 自动调用 Daughter b 2 else Daughter2 lag false Daughter2 等待取消 cout 处于等待的 Daughter2 自动被调 用 endl Daughter2 处于等待的 Daughter2 自动调用 Daughter b 1 else if Daughter1 lag true Daughter1 lag false Daughter1 等待取消 cout 处于等待的 Daughter1 自动被调 用 endl Daughter1 处于等待的 Daughter1 自动调用 Daughter b 0 else if Daughter2 lag true Daughter2 lag false Daughter2 等待取消 cout 处于等待的 Daughter1 自动被调 用 endl 沈阳理工大学课程设计专用纸 9 Daughter2 处于等待的 Daughter2 自动调用 Daughter b 0 break case 1 cout Mother 调用 endl if Plate Size 2 Mother lag true 等待 Print if Father lag false MonFa c 2 else Mother if Son1 lag true Son1 等待取消 cout 处于等待的 Son1 自动被调用 endl Son1 处于等待的 Son1 自动调用 Son a 2 else Son2 lag false Son2 等待取消 cout 处于等待的 Son2 自动被调用 endl Son2 处于等待的 Son2 自动调用 Son a 1 else if Son1 lag true Son1 lag false Son1 等待取消 cout 处于等待的 Son1 自动被调用 endl 沈阳理工大学课程设计专用纸 10 Son1 处于等待的 Son1 自动调用 Son a 0 else if Son2 lag true Son2 lag false Son2 等待取消 cout 处于等待的 Son2 自动被调用 endl Son2 处于等待的 Son2 自动调用 Son a 0 break case 2 cout Son1 调用 endl if orange 0 Son1 lag true Son1 处于等待 Print if Son2 lag false Son a 1 用于判断 Son1 和 Son2 等待的先后性 else Son1 if Father lag true cout 处于等待的 Father 自动被调用 endl Father MonFa c 2 else Father 和 Mother 同时处于等待 但 Mother 先等待 因此先调 用 Mother lag false cout 处于等待的 Mother 自动被调用 endl Mother 沈阳理工大学课程设计专用纸 11 MonFa c 1 else if Father lag true 只有 Father 处于等待 调用 Father lag false cout 处于等待的 Father 自动被调用 endl Father MonFa c 0 else if Mother lag true 只有 Mother 处于等待 调用 Mother lag false cout 处于等待的 Mother 自动被调用 endl Mother MonFa c 0 break case 3 cout Son2 调用 endl if orange 0 Son2 lag true Son2 处于等待 Print if Son1 lag false Son a 2 else Son2 if Father lag true cout 处于等待的 Father 自动被调用 endl 沈阳理工大学课程设计专用纸 12 Father MonFa c 2 else Father 和 Mother 同时处于等待 但 Mother 先等待 因此 先调用 Mother lag false cout 处于等待的 Mother 自动被调用 endl Mother MonFa c 1 else if Father lag true 只有 Father 处于等待 调用 Father lag false cout 处于等待的 Father 自动被调用 endl Father MonFa c 0 else if Mother lag true 只有 Mother 处于等待 调用 Mother lag false cout 处于等待的 Mother 自动被调用 endl Mother MonFa c 0 break case 4 cout Daughter1 调用 endl if apple 0 Daughter1 lag true Daughter1 等待 Print if Daughter2 lag false Daughter b 1 else 沈阳理工大学课程设计专用纸 13 Daughter1 if Father lag true cout 处于等待的 Father 自动被调用 endl Father MonFa c 2 else Father 和 Mother 同时处于等待 但 Mother 先等待 因此先 调用 Mother lag false cout 处于等待的 Mother 自动被调用 endl Mother MonFa c 1 else if Father lag true 只有 Father 处于等待 调用 Father lag false cout 处于等待的 Father 自动被调用 endl Father MonFa c 0 else if Mother lag true 只有 Mother 处于等待 调用 Mother lag false cout 处于等待的 Mother 自动被调用 endl Mother MonFa c 0 break case 5 沈阳理工大学课程设计专用纸 14 cout Daughter2 调用 endl if apple 0 Daughter2 lag true Daughter2 等待 Print if Daughter1 lag false Daughter b 2 else Daughter2 if Father lag true cout 处于等待的 Father 自动被调用 endl Father MonFa c 2 else Father 和 Mother 同时处于等待 但 Mother 先等待 因此先 调用 Mother lag false cout 处于等待的 Mother 自动被调用 endl Mother MonFa c 1 else if Father lag true 只有 Father 处于等待 调用 Father lag false cout 处于等待的 Father 自动被调用 endl Father MonFa c 0 else if Mother lag true 只有 Mother 处于等待 调用 Mother lag false cout 处于等待的 Mother 自动被调用 endl 沈阳理工大学课程设计专用纸 15 Mother MonFa c 0 break 沈阳理工大学课程设计专用纸 16 1 5 提交结果框图提交结果框图 由于程序是模拟产生 10 次随机的操作 执行相应的函数来模拟进程同步 可以 将程序运行两次将会得到不同的结果 第一次产生结果如下 图 3 第一次随机操作结果 沈阳理工大学课程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大班言语汇报课
- 妇产科围手术期护理
- 站助理工作总结
- 总宿舍长工作总结
- 赵州桥黄丽娜课件
- 消防云梯抢险救援课件
- 资本主义简单再生产课件
- 资产安全生产月培训课件
- 消毒供应室课件回收
- 质量安全管理培训结束语课件
- GB/T 7713.4-2025信息与文献编写规则第4部分:数据论文
- 法律职业资格考试客观题(试卷一)试题与参考答案(2025年)
- 狂犬疫苗使用培训课件
- 2025新疆伊犁州伊宁市中小学招聘各学科编外教师备考考试题库附答案解析
- 2023-2025年高考化学试题分类汇编:有机化合物(原卷版)
- 【2025年】郴州社区专职工作人员招聘考试笔试试卷【附答案】
- 2025发展对象考试题库附含答案
- 2025广东广州市越秀区大东街道办事处经济发展办招聘辅助人员(统计员岗)1人笔试备考试题及答案解析
- 2025-2026学年第一学期学校教导处工作计划:扎根常规提质效稳中求进促提升
- 主体结构劳务分包工程(八标段)施工组织设计
- 营养与慢性伤口愈合的关系
评论
0/150
提交评论