多进程同步橘子苹果问题完整报告(附源代码)

上传人:hs****ma 文档编号:492567849 上传时间:2023-01-09 格式:DOC 页数:42 大小:253.02KB
返回 下载 相关 举报
多进程同步橘子苹果问题完整报告(附源代码)_第1页
第1页 / 共42页
多进程同步橘子苹果问题完整报告(附源代码)_第2页
第2页 / 共42页
多进程同步橘子苹果问题完整报告(附源代码)_第3页
第3页 / 共42页
多进程同步橘子苹果问题完整报告(附源代码)_第4页
第4页 / 共42页
多进程同步橘子苹果问题完整报告(附源代码)_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《多进程同步橘子苹果问题完整报告(附源代码)》由会员分享,可在线阅读,更多相关《多进程同步橘子苹果问题完整报告(附源代码)(42页珍藏版)》请在金锄头文库上搜索。

1、一、 课程设计目的本次实验进行操作系统课程设计的主要任务是模拟生产者和消费者的一个衍生,即实现“橘子-苹果问题”。这个问题中有两个生产者,分别生产苹果核橘子,有两个消费者,分别消费橘子和苹果。同时,因为两个生产者和两个消费者对同一个缓冲区进行操作,所以应互斥的访问缓冲区以保证程序的正确性。本次实验的目的就是加深各个进程正确有效的对资源的访问,即同步和互斥。同时掌握信号量在互斥访问中的使用。掌握生产者和消费者问题的流程和实现方法。同时提高编程的能力、对问题的解决能力及查阅文档的能力。二、 课程设计内容与要求1、通过研究Linux的进程同步机制和信号量,实现特殊的生产者与消费者问题的并发控制。2、

2、说明:有两类生产者,一类负责生产桔子,一类负责生产苹果;有两类消费者,一类负责消费桔子,一类负责消费苹果;他们共享一个有20个存储单元的有界缓冲区,每个存储单元只能放入一种产品(桔子/苹果)。3、设计要求:1) 二类生产者与二类消费者数目均为20,即20个生产者负责生产桔子,20个生产者负责生产苹果;20个消费者负责消费桔子,20个消费者负责消费苹果2) 二类生产者的生产速度与二类消费者的消费速度均可独立在程序界面调节,在运行中,该值调整后立即生效3) 多个生产者或多个消费者之间必须有共享对缓冲区进行操作的函数代码,同时需要考虑算法的效率性4) 每个生产者和消费者对有界缓冲区进行操作后,即时显

3、示有界缓冲区的全部内容、当前生产者与消费者的指针位置,以及生产者和消费者线程标识符5) 采用可视化界面,可在运行过程中随时暂停,查看当前生产者、消费者以及有界缓冲区的状态三、 系统分析与设计1、系统分析1.此次任务是实现特殊生产者和消费者的演示程序,所需要处理的信息是生产者和消费者的个数,生产苹果、橘子和消费苹果、橘子的速度控制,缓冲区中橘子和苹果的个数和当前生产、消费指针的位置。2.程序中需要处理缓冲区的动态显示、生产者和消费者的速度可以调节,生产者和消费者个数可以改变。为了实现界面的友好性,应该对用户标明清楚各个模块的作用。同时实时的对程序进行暂停和停止。演示程序中用图形显示的方法描述缓冲

4、区的使用情况,即当前缓冲区有多少个苹果和橘子,还有生产和消费者的指针。3.系统对外的界面如下:可以调节橘子和苹果的生产速度和消费苹果和橘子的速度,在文本框中输入相应的速度,再按下修改按键即可实现速度的实时调节。在苹果生产者、橘子生产者、苹果消费者、橘子消费者中实现对个数按钮的按下即可动态实时的调节生产者和消费者的个数的调节。在界面的最下面点击开始按钮,程序开始运行,暂停按钮使程序暂停挂起,再点击则可以继续运行。停止按钮实现此次程序的演示结束。4.此次使用java平台实现,保证了程序在各种机器的运行,只需要事前建立java的运行环境即可,便于程序的移植5.系统界面如下:动态显示区程序速度控制区生

5、产者和消费者数字调节开始、暂停、终止按键区2、系统设计:2.1、模块设计:系统主模块主界面模块生产者控制模块消费者控制模块块有界缓冲区控制模块人工智能模块主界面模块绘图模块动态进度条生产者数目调节消费者数目调节生产者速度调节消费者速度调节2.2、数据结构说明:1.缓冲区的数据结构:双端队列说明:左端放置生产苹果的指针,右端放置生产橘子的指针。缓冲区苹果指针橘子指针2.缓冲区操作的类图,实现对缓冲区的实际操作缓冲区MyStorage生产苹 果increaseapple()生产橘子increaseorange()消费苹果decreaseapple()消费橘子decreaseorange()缓冲区状

6、态isFull互斥信号量mutex同步信号量emptyfull苹果指针pointapple橘子指针pointorange2.3、算法流程图:1.生产苹果算法申请空缓冲区信号量empty大于0pointapple = pointapple+1isFullapplepoint = truePoolpointapple = 1打印缓冲区状态apple=apple+1 full=full+1释放缓冲区线程阻塞NY2.消费苹果算法申请空缓冲区 full=full+1信号量full大于0pointapple = pointapple-1isFullapplepoint = falsePoolpointap

7、ple = 0打印缓冲区状态apple=apple-1empty=empty+1释放缓冲区线程阻塞YN3.绘图算法i = i+1i 20?pooli=0pooli=1填充红色填充黄色画矩形画指针i =-14.生产苹果者人工智能算法(生产橘子人工智能相似)进入缓冲区缓冲区产品数=16增加苹果消费者,减少苹果生产者,增加橘子生产者生产苹果苹果=12拒绝生产请求增加苹果消费者退出缓冲区NYNYN5.苹果消费者人工智能算法(生产橘子算法类似)进入缓冲区缓冲区产品数=4苹果个数2消费苹果增加苹果生产者减少苹果消费者增加橘子生产者增加橘子生产者减少橘子消费者增加苹果生产者退出缓冲区YNYN橘子数2增加橘子

8、生产者减少橘子消费者增加苹果生产者苹果数2增加苹果生产者减少苹果消费者增加橘子生产者YYNN四、系统测试与调试分析1、系统测试(1)因为当苹果生产者在缓冲区满了以后自动阻塞,需要苹果消费者唤醒,所以需要测试唤醒的实现是否正常。测试说明测试名称用多进程同步方法演示“桔子-苹果”问题测试目的验证苹果生产者能被苹果消费者唤醒测试技术单元测试测试方法黑盒测试法测试用例测试内容当生产者生产满缓冲区后,开始增加消费者,唤醒生产者测试步骤增加苹果生产者等待缓冲区被用完增加苹果消费者测试数据增加苹果生产者到3缓冲区苹果数量20缓冲区空闲位为0苹果消费者增加到4预期结果缓冲区开始增加苹果缓冲区满 苹果生产者阻塞

9、苹果生产者被唤醒,缓冲区中苹果数量减少测试结果与预期相符与预期相符与预期相符(2)因为当苹果生产者在缓冲区满了以后自动阻塞,需要苹果消费者唤醒,所以需要测试唤醒的实现是否正常。测试说明测试名称用多进程同步方法演示“桔子-苹果”问题测试目的验证多个苹果橘子生产者和苹果、橘子消费者互斥操作缓冲区测试技术单元测试测试方法黑盒测试法测试用例测试内容缓冲区为空,消费者阻塞时,生产者唤醒消费者测试步骤开始生产产品,缓冲区为空 空闲位20开始消费产品,终止生产线程开始增加生产者减少消费者测试数据橘子生产者数量5苹果生产者数量5苹果生产者减少到0橘子生产者减少到0增加橘子消费者到5增加苹果消费者到5增加苹果生

10、产者到5增加橘子生产者到5减少橘子消费者到2减少苹果消费者到2预期结果缓冲区内产品数量每次减少10个消费完成产品,消费者阻塞唤醒消费者,缓冲区中产品增加测试结果与预期相符与预期相符与预期相符(3)测试生产者和消费者的速度是否可以调节测试说明测试名称用多进程同步方法演示“桔子-苹果”问题测试目的苹果、橘子生产者和苹果、橘子消费者速度可以调节测试技术单元测试测试方法黑盒测试法测试用例测试内容调节生产者和消费者速度测试步骤开始程序运行输入生产者、消费者速度值点击修改按钮测试数据苹果、橘子生产者速度2000苹果、橘子消费者速度2000生产者的速度值 1000消费者速度值1000点击修改预期结果缓冲区开

11、始被操作界面文本框中显示速度值生产者、消费者速度变化到1000测试结果与预期相符与预期相符与预期相符(4)实现了人工智能操作:即系统自动保持生产者和消费者的相对平衡,测试功能的正确实现测试说明测试名称用多进程同步方法演示“桔子-苹果”问题测试目的测试编写的人工智能是否实现测试技术单元测试测试方法黑盒测试法测试用例测试内容自动维持缓冲区的稳定测试步骤开始程序的运行运行人工智能操作测试数据苹果生产者 5苹果消费者 5橘子生产者 3橘子消费者 0 减少苹果生产者到0增加苹果消费者数量到6预期结果缓冲区开始被操作生产者、消费者数量都靠拢至4测试结果与预期相符与预期相符与预期相符2、调试分析:(1)程序

12、编写过程中,因为有两个生产者和消费者,极易把操作写错。在编写增加苹果数量额函数中,程序中午无法增加苹果数量。解决办法:在函数中查找错误,对苹果的操作写成了对橘子的操作,导致程序出现问题。(2)在对缓冲区进行绘图的时候,java的JComponent组件内绘图位置出现错误。解决办法:JComponent内绘图时因为JComponent内使用的是相对坐标,所以不能使用面板的绝对坐标,换成相对坐标正确绘图。(3)实现人工智能操作的时候,点击相应按钮无法执行解决办法:在排查完毕后,发现按键响应没有对程序已经设计的标志值进行修改,致使程序没有按预期执行,修改完标志值即可以。五、用户手册1.使用的语言和平

13、台本次实验使用的是java 语言的eclipse平台2.对于程序运行环境的注意事项需要安装java运行环境,eclipss平台不需要安装,只需要下载完成就可以使用。3.程序使用步骤图1:系统登录界面。图2:生产者速度调节 图3:消费者速度调节图4:生产者数量调节 图5:消费者数量调节 图 6::控制界面图7:动态可视化缓冲区4.程序使用步骤:1)单击开始按钮,程序开始初始化执行2)点击增加按钮分别增加生产者和消费者,可以看到可视化缓冲区开始运动3)在速度调节部分调节生产者和消费者的速度,可以看到缓冲区出现预期的产品种类和数量的变化。4)在程序运行状态,可以点击“人工智能”按钮,可以实现人工智能

14、自动操作缓冲区,保持缓冲区的产品数量和种类的稳定,不至于产品数量过多或过少,也不会出现某种产品数量过多或者过少。六、程序清单import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.awt.geom.Ellipse2D;import java.awt.geom.Rectangle2D;import java.awt.*;import .MalformedURLException;import java.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > 总结/计划/报告

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