生产者和消费者课程设计基于Java可视化界面

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

《操作系统》课程设计生产者和消费者问题实践系院:计算机科学系学生姓名:王乙丞学号:1034140105专业:计算机科学与技术年级:三年级完成日期:2010年12月指导教师:徐亮一、课程设计的性质与任务1、加深对并发协作进程同步与互斥概念的理解。2、培养学生能够独立进行知识综合,独立开发较大程序的能力。3、培养提高学生软件开发能力和软件的调试技术。4、培养学生开发大型程序的方法和相互合作的精神。5、培养学生的创新意识。6、培养学生的算法设计和算法分析能力。7、培养学生对问题进行文字论述和文字表达的能力。二、课程设计的内容及其要求1、可利用临界区(CCriticalSection)、事件(CEvent)、信号量(CSemaphore)来实现进程的同步。2、根据生产者和消费者问题的特性做好软件实现的需要分析。3、可根据问题的实际需要,来改变对信号量的使用及数量和初值的赋值。4、当系统运行时,能直观地、动态地反映当前进程或线程运行的状态和信号量的变化。5、要求系统能满足多进程或多线程的互斥与同步。6、要求在系统安全状态的前提下,兼顾各个进程或线程的公平。三、课程设计的时间安排课程设计总时间:15学时四、课程设计的实验环境硬件环境:CPUIntel(R)Core™2DuoT58002.0GHz,内存DDR22.00GB,硬盘5400转160G,光驱16XDVD软件环境:Windows7旗舰版,JDK1.6.0_21五、正文1、实验程序的结构图(流程图);2、数据结构及信号量定义的说明;(1)classThread功能:线程类,用于创建并执行线程构造方法:publicThread()作用:分配新的Thread对象。(2)booleanavailable功能:信号量作用:传递生产者与消费者进程之间的开始和等待信号(3)wait()功能:使程序处于等待状态(4)sleep(intn)功能:使线程暂停n毫秒3、实验的步骤;(1)打开Windows系统自带的笔记本程序在任务栏“开始”菜单内“搜索程序和文件”搜索栏内键入“记事本”或者使用快捷键Win+R,打开“运行”对话框,然后键入“notepad”即可快速打开“记事本”程序。开始ProduceWaitBufferWaitProductsConsumeWhileconsume结束Whileproduce(2)创建源文件(类)在记事本内依次创建窗口类(Window)、共享资源类(Share)、生产者类(Producter)、消费者类(Consumer)以及最后的程序入口接入类(PCmx),最后保存为PCmx.java源文件。(3)编译源文件使用快捷键Win+R打开“运行”对话框,键入“cmd”打开控制台窗口,并用DOS命令进入保存有程序源文件的目录,键入“JavacPCmx.java”进行编译,若有错误提示则按照提示对源文件进行查错更改,然后重新进行编译直至无错误提示。(4)运行程序编译成功后,在控制台界面(仍然为源程序目录)内,继续键入“JavaPCmx”,运行程序。4、实验源程序关键算法创建共享资源类(Share)classShare{privateintu;privatebooleanavailable=false;//信号量availablepublicJTextAreajt=newJTextArea(生产消费状态:\n);//构造成员方法get(),用于向共享资源内取资源publicsynchronizedintget(){//使用“synchronized”关键字可以使进程同步while(available==false){try{wait();}catch(InterruptedExceptione){}jt.append(Share中没有资源,消费者等待……\n);}available=false;notifyAll();jt.append(正在唤醒生产者生产……\n);returnu;}//构造成员方法put(),用于向共享资源内放资源publicsynchronizedvoidput(intvalue){//使用“synchronized”关键字可以使进程同步while(available==true){try{wait();}catch(InterruptedExceptione){}jt.append(Share中已有资源,生产者等待……\n);}u=value;available=true;notifyAll();jt.append(正在唤醒消费者消费……\n);}}创建生产者线程(Producer)classProducerextendsThread{privateShareshared;publicStringjieguo[]=newString[11];publicJTextAreajt=newJTextArea();//构造方法并对私有成员变量赋值publicProducer(Shares){shared=s;}//重写父类方法publicvoidrun(){for(inti=1;i11;i++){shared.put(i);jieguo[i]=生产者第+i+次生产+生产者的生产数据:+i+\n;jt.append(jieguo[i]);try{sleep(1000);}catch(InterruptedExceptione){}}}}创建消费者线程(Consumer)classConsumerextendsThread{privateShareshared;publicStringjieguo[]=newString[11];publicJTextAreajt=newJTextArea();//构造方法并对私有变量赋值publicConsumer(Shares){shared=s;}//重写父类方法publicvoidrun(){intvalue=0;//默认十次循环,消费者将从共享资源内取出相应资源for(inti=1;i11;i++){value=shared.get();jieguo[i]=消费者第+i+次消费+消费者获得的生产数据:+value+\n;jt.append(jieguo[i]);try{sleep(1000);}catch(InterruptedExceptione){}}}}5、实验运行图;同步运行结果互斥运行结果6、实验结果分析;只有在生产者生产了产品并将产品存放到缓冲池中消费者才能去消费,当缓冲池为空时消费者不能消费六、结论(应当准确、完整、明确精练;也可以在结论或讨论中提出建议、设想、尚待解决问题等。)七、参考文献【1】邵丽萍,邵光亚,张后扬编著.Java语言程序设计,清华大学出版社。2008年8月第3版【2】汤小丹,梁红兵,哲凤屏,汤子瀛编著.计算机操作系统,西安电子科技大学出版社。2007年5月第3版八、指导教师评语签名:年月日课程设计成绩附:课程设计源代码:importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;//窗口类classwindowextendsJFrame{publicJFramejf;publicJPaneljp3;publicScrollPanesp1,sp2,sp3;publicContainerc;window(){jf=newJFrame();jp3=newJPanel();sp1=newScrollPane();sp2=newScrollPane();sp3=newScrollPane();c=getContentPane();c.setLayout(newGridLayout(2,2,10,10));jf.add(c);c.add(sp1);c.add(sp2);c.add(jp3);c.add(sp3);jf.setSize(400,300);jf.setVisible(true);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}//Share类classShare{privateintu,jishu=0;privatebooleanavailable=false;publicJTextAreajt=newJTextArea(==========生产消费状态==========\n\n);//同步方法publicsynchronizedintget(){jishu++;while(available==false){try{wait();}catch(InterruptedExceptione){}jt.append(jishu+Share中没有资源,消费者等待……\n);}available=false;notifyAll();jt.append(jishu+正在唤醒生产者生产……\n);returnu;}publicsynchronizedvoidput(intvalue){jishu++;while(available==true){try{wait();}catch(InterruptedExceptione){}jt.append(jishu+Share中已有资源,生产者等待……\n);}u=value;available=true;notifyAll();jt.append(jishu+正在唤醒消费者消费……\n);}//互斥方法publicinthget(){jishu++;jt.append(jishu+消费者正在消费资源……\n);returnu;}publicvoidhput(intvalue){jishu++;jt.append(jishu+生产者正在生产资源……\n);u=value;}}//生产者类classProducerextendsThread{privateShareshared;publicStringjieguo[]=newString[11];publicJTextAreajt=newJTextArea(==========生产者进程==========\n\n);publicProducer(Shares){shared=s;}publicvoidrun(){for(inti=1;i11;i++){shared.put(i);jieguo[i]=i+生产者第+i+次生产+生产者的生产数据:+i+\n;jt.append(jieguo[i]);try{//sleep((int)(Math.random()*100));sleep(1000);}catch(InterruptedExceptione){}}}}classhProducerextendsThread{privateShareshared;publicStringjieguo[]=newString[11];publicJTextAreajt=newJTextArea(==========生产者线程==========\n\n);publichProducer(Shares){shared=s;}publicvoidrun(){for(inti=1;i11;i++){shared.hput(i);jieguo[i]=i+生产者第+i+次生产+生产者的生产数据:+i+\n;jt.append(jieguo[i]);try{//sleep((int)(Math.random()*100));sleep(1000);}catch(InterruptedExceptione){}}}}//消费者类classConsumerextendsThread{privateShareshared;publicStringjieguo[]=newString[11];publicJTextAreajt=newJTextArea(==========消费者线程==========\n\n);publicConsumer(Shares){shared=s;}publicvoidr

1 / 13
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功