多进程同步方法演示“生产者-消费者”问题.docx

上传人:lao****ou 文档编号:1093415 上传时间:2024-10-29 格式:DOCX 页数:9 大小:118.90KB
下载 相关 举报
多进程同步方法演示“生产者-消费者”问题.docx_第1页
第1页 / 共9页
多进程同步方法演示“生产者-消费者”问题.docx_第2页
第2页 / 共9页
多进程同步方法演示“生产者-消费者”问题.docx_第3页
第3页 / 共9页
多进程同步方法演示“生产者-消费者”问题.docx_第4页
第4页 / 共9页
多进程同步方法演示“生产者-消费者”问题.docx_第5页
第5页 / 共9页
亲,该文档总共9页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《多进程同步方法演示“生产者-消费者”问题.docx》由会员分享,可在线阅读,更多相关《多进程同步方法演示“生产者-消费者”问题.docx(9页珍藏版)》请在第一文库网上搜索。

1、青岛理工大学操作系统课程设计报告院(系):计算机工程学院专业:计算机科学与技术专业学生姓名:班级:学号:题目:用多进程同步方法演示“生产者-消费者问题起迄日期:设计地点:指导教师:年度第学期完成日期:年月日一、课程设计目的本次进行操作系统课程设计的主要任务是设计一个模拟生产者消费者工作的系统。这个问题中有一种生产者和一种消费者,生产者和消费者对同一个缓冲区进行操作,互斥的访问缓冲区。本次课程设计的目的就是加深对多进程如何正确访问资源的认识,同时掌握信号量在互斥访问时应该如何正确有效地使用。掌握生产者消费者问题的解决流程和方法,提高编程能力、解决问题的能力和查阅文档的能力。二、课程设计内容与要求

2、1、设计目的:通过研究1inUX的进程同步机制和信号量,实现生产者消费者问题的并发控制。2、说明:有界缓冲区内设有20个存储单元,放入取出的产品设定为20个100以内的随机整数。3、设计要求:D生产者与消费者均有二个以上2)生产者和消费者进程的数目在程序界面上可调,在运行时可随时单个增加与减少生产者与消费者3)生产者的生产速度与消费者的消费速度均可在程序界面调节,在运行中,该值调整后立即生效4)生产者生产的产品由随机函数决定5)多个生产者或多个消费者之间必须有共享对缓冲区进行操作的函数代码6)每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容、当前生产者与消费者的指针位置,

3、以及生产者和消费者线程标识符7)采用可视化界面,可在运行过程中随时暂停,查看当前生产者、消费者以及有界缓冲区的状态三、系统分析与设计1、系统分析系统分析1 .此次课程设计的任务是生产者消费者问题的模拟演示,需要处理的数据有:生产者进程数目,消费者进程数目,生产者生产速度,消费者消费速度,缓冲区中产品的个数,以及生产、消费产品的指针。2 .程序中需要缓冲区中的信息可以动态演示,生产者、消费者的个数以及生产、消费时的速度可以随时调节,同时为了使程序更加友好,应该具有开始、暂停、停止等相关可操作按钮。3 .系统对外的界面如下:1对进程个数的修改:点击生产者、消费者进程数据文本框下的增加、减少按钮2对

4、速度的修改:速度值默认为2000ms个,如需修改,那么在速度文本框中输入所修改的值,点击修改按钮即可进行修改。3需要开始模拟时,点击右上方的开始按钮。如需暂停模拟过程,可点击暂停按钮。当需要运行完毕时,点击停止按钮,进程工作停止。4.此次使用java平台实现,保证了程序在各种机器的运行,只需要事前建立java的运行环境即可,便于程序的移植申请空缓冲区fu11=fu11+11、系统测试(1)因为当生产者在缓冲区满了以后自动阻塞,需要消费者唤醒,所以需要测试唤醒的实现是否正常。测试说明测试名称用多进程同步方法演示“生产者-消费者问题测试目的验证生产者能被消费者唤醒测试技术单元测试测试方法黑盒测试法

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

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

7、点击修改例消费者速度2000消费者速度值1000预期结果缓冲区开始被操作界面文本框中显示速度值速度均变化到IOOO测试结果与预期相符与预期相符与预期相符2、调试分析:1 .在编写过程中,由于函数较多,开始时由于名称不够清晰,程序出现错误。2 .测试运行过程中,由于函数名称的相似,出现引用混乱的情况,程序无法正常运行。3 .在制作界面时,由于遗忘了chuangkou.add(jp);chuangkou.SetVisib1e(true);两个语句,导致界面无法正常显示。4 .制作界面时,对各个控件的坐标和大小考虑不周,导致界面混乱,影响美观。五、用户手册1使用的语言和平台本次实验使用的是java语

8、言的ec1ipse平台5 .对于程序运行环境的考前须知需要安装java运行环境,ec1ipss平台不需要安装,只需要下载完成就可以使用。6 .程序使用步骤图1:系统登录界面。图2:生产者速度调节图3:消费者速度调节图4:生产者数量调节图5:消费者数量调节图6::控制界面图7:动态显示缓冲区7 .程序使用步骤:1单击开始按钮,程序开始初始化执行2点击增加按钮分别增加生产者和消费者,可以看到可视化缓冲区开始运动3在速度调节局部调节生产者和消费者的速度,可以看到缓冲区出现预期的产品种类和数量的变化。六、程序清单c1assConsumerextendsThreadprivatehuanchongquh

9、cq;保存一个缓冲区类的引用Static1ongspeec/=2000;/SPeed表示消费者线程的速度Staticintcpause=0;CPaUSe变量用来控制消费者线程的开始与暂停boo1eanout=fa1se;定义构造方法,接收一个缓冲区类型的变量pub1icConsumer(huanchongquhcq)this.hcq=hcq;)run()方法调用接收的缓冲区类型的变量指向的decrease。方法,开始消费元素。Overridepub1icvoidrun()whi1e(1out)if(out)break;if(cpause1)tryThread.s1eep(SPeed);)cat

10、ch(InterruptedExceptione)eprintStackTrace();)hcq.Consume();)c1assProducerextendsThreadprivatehuanchongquhcq;定义缓冲区类的引用。Static1ongspeed=2000;定义SPeed变量,表示线程速度boo1eanout=fa1se;Pub1icstaticintppause=0;DDaUSe变量用来控制生产者线程的开始与暂停定义构造方法,接收一个缓冲区类型的变量pub1icProducer(huanchongquhcq)this.hcq=hcq;)pub1icvoidchangeou

11、t()out=!out;)run()方法调用缓冲区类型变量指向的对象的increase。方法,开始生产元素。Overridepub1icvoidrun()(whi1e(!out)if(out)break;if(ppause=1)tryThreads1eep(SPeed);)catch(InterruptedExceptione)e.printStackTrace();)hcq.Produce();)c1asshuanchongqu/number表示动态缓冲区中元素的数量Staticintnumber=0;Staticboo1eanE_F=newboo1ean20;/缓冲区状态控制Statici

12、ntstorage=newint20;staticSemaphoreempty=newSemaphore(20);staticSemaphorefu11=newSemaphore(O);staticSemaphorechanpin=newSemaphore(O);staticSemaphoremutex=newSemaphore(I);staticintcpnu/w=0;Staticintpointcp=-1;pub1ichuanchongqu()for(inti=0;i20;i+)E_Fi=fa1se;storagei=,0,;)pub1icvoidProduce()(e如ty.acquir

13、e。;/信号量的P操作,申请空缓冲区u亡ex.acquire。;/互斥信号量if(pontcp+1!=20)pointcp+;E_Fpointcp=true;将生产了产品的标志位设为满cpnum+;storagepointcp=(int)(Math.rncow()*99+0);存储生产的产品)Stringstr2=Thread.currentThread().getName();PC.S2.append(“生产者”+str2+运行n);number+;PC.t02.append(”仓库中的产品个数为“+number+,);pc,S2.append(它们是:n);for(intj=0;j20;j

14、+)(if(storgej!=,0,)pc.tai.append(,(,+j+)+storagej+,);e1sepc.t71.append(,);if(number=20)pc.tai.append(,n仓库已满,);)pc.t1.append(,n);mutex.re1ease();/释放互斥锁fu11.re1ease。/增加满信号量的值chanpin.re1ease();/增加产品信号量的值pub1icvoidConsume()(chanpin.acquire();/申请获得产品fu11.acquire。/申请满缓冲区wutex.acquire();/互斥进入临界区Stringstr2=Thread.currentThread().getName();pc.t2.append(消费者,,+str2+运行r,);number-;cpnum-;E_Fpointcp=fa1se;设置为空storagepointcp=,0,;pointcp-;产品指针减一PCSN.append(,仓库中的数字个数为,+number+,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 应用文档 > 工作总结

copyright@ 2008-2022 001doc.com网站版权所有   

经营许可证编号:宁ICP备2022001085号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有,必要时第一文库网拥有上传用户文档的转载和下载权。第一文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第一文库网,我们立即给予删除!



客服