苹果-桔子问题的实现说明书

苹果-桔子问题的实现说明书

ID:14462495

大小:184.00 KB

页数:25页

时间:2018-07-28

苹果-桔子问题的实现说明书_第1页
苹果-桔子问题的实现说明书_第2页
苹果-桔子问题的实现说明书_第3页
苹果-桔子问题的实现说明书_第4页
苹果-桔子问题的实现说明书_第5页
资源描述:

《苹果-桔子问题的实现说明书》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、*******************实践教学*******************某大学***学院***年秋季学期操作系统原理课程设计题目:苹果-桔子问题的实现专业班级:计算机科学与技术姓名:学号:指导教师:成绩:目录前言1摘要2正文31.设计思想32.算法用到的主要数据结构(采用类c语言定义)43.相关的各模块的伪码算法54.调试分析95.测试结果9总结15参考文献16致谢17附件Ⅰ部分源程序代码18源程序(带注释)18前言进程间存在两种相互关系:竞争与合作,进程互斥是解决进程间资源竞争关系的手段,任何时刻

2、只允许一个进程使用,其他要使用该资源的进程必须等待。进程同步是解决进程间合作关系的手段,指两个或两个以上进程基于某个条件来协调它们的活动,一个进程的执行依赖于另一个合作进程的消息或信号,当一个进程没有得到来自于另一个进程的消息或信号时需要等待,直到消息或信号到达时才被唤醒。本次课程设计题目是苹果桔子问题的实现,爸爸进程与妈妈进程是互斥进程,女儿进程与儿子进程也是互斥进程,每次只允许其中一个发生。妈妈进程与儿子进程是同步进程,爸爸进程与女儿进程是同步进程,只有爸爸放入苹果,女儿才能取苹果,同理,只有妈妈放入桔子,

3、儿子才能取桔子。本次课设在VC操作系统下使用C语言设计这个进程的执行。23摘要这次课设的题目是苹果-桔子问题的实现,这是一个进程同步互斥问题。爸爸专向盘中放苹果,妈妈专向盘中放桔子,儿子专等吃盘中的桔子,女儿专等着吃盘中的苹果。父母是放入水果的,子女是吃水果的,也就是只有父母放入水果,子女才能吃水果;只有子女吃完水果,父母才再次放入水果。放水果者和吃者共享缓冲区,缓冲区中有空时,放水果者可放入产品(不许放重),否则等待。缓冲区中有产品时,吃水果者可取出产品(不许取重),否则等待。本次课设基于VC下用C语言设计进

4、程的执行。关键词:苹果,桔子,进程同步;互斥;等待。23正文1.设计思想这是一个进程同步互斥问题,也是生产者消费者问题,所以采用与生产者消费者类似的设计理念。设plate,orange和apple是爸爸妈妈儿子女儿的私用信号量。plate表示盘子的状态,其含义是爸爸妈妈是否可以放入水果,初值为0表示盘子是空的,可以放苹果或桔子。orange表示盘中是否有桔子,其含义是儿子是否可以取桔子,其初值为0表示不能取桔子。apple表示盘中是否有苹果,其含义是女儿是否可以取苹果,其初值为0表示不能取苹果。爸爸放完苹果后,

5、女儿才可以取苹果,妈妈放完桔子后,儿子才可以取桔子。主函数中采用除4取余法调用各个进程的执行,当余数为1时调用爸爸进程,余数为2时调用女儿进程,余数为3时调用妈妈进程,余数为0时调用儿子进程。函数调用关系如图1.1如下:儿子进程0主函数爸爸进程1i%4=女儿进程2妈妈进程3图1.1函数调用关系231.算法用到的主要数据结构(采用类c语言定义)1)数据定义:intplate=0;intapple=0;intorange=0;intN;inti;intp;2)爸爸进程:if(plate==1)盘子已满,爸爸等待;e

6、lse{盘子为空,爸爸放入苹果;plate=1;apple=1;}3)妈妈进程:if(plate==1)盘子已满,妈妈等待;else{盘子为空,妈妈放入桔子;plate=1;orange=1;}4)儿子进程:if(plate==0)盘子为空,儿子等待;23else{盘子有桔子,儿子取桔子吃;orange=0;plate=0;}1)女儿进程:if(plate==0)盘子为空,女儿等待;else{盘子有苹果,儿女取苹果吃;apple=0;plate=0;}1.相关的各模块的伪码算法1)爸爸进程:father(){i

7、f(plate==1){printf(“盘子已满,等待”);return;}else{23apple=1;plate=1;printf(“爸爸放苹果”);return;}}1)妈妈进程:mother(){if(plate==1){printf(“盘子已满,等待”);return;}else{orange=1;plate=1;printf(“妈妈放桔子”);return;}}2)儿子进程:son(){if(plate==0){printf("盘子为空,儿子等待");return;}23elseif(orange=

8、=1){orange=0;plate=0;printf("盘子有桔子,儿子取桔子吃");return;}else{printf("盘子有苹果,儿子等待");return;}}1)女儿进程:voiddaughter(){if(plate==0){printf("盘子为空,女儿等待");return;}elseif(apple==1){apple=0;plate=0;printf(

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。