




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
操作系统课程设计生产者和消费者问题实践系 院:计算机科学系学生姓名:王乙丞学 号:1034140105专 业:计算机科学与技术年 级:三年级完成日期:2010年12月指导教师:徐亮一、课程设计的性质与任务1、加深对并发协作进程同步与互斥概念的理解。2、培养学生能够独立进行知识综合,独立开发较大程序的能力。3、培养提高学生软件开发能力和软件的调试技术。4、培养学生开发大型程序的方法和相互合作的精神。5、培养学生的创新意识。6、培养学生的算法设计和算法分析能力。7、培养学生对问题进行文字论述和文字表达的能力。二、课程设计的内容及其要求1、可利用临界区(CCriticalSection)、 事件(CEvent)、 信号量(CSemaphore)来实现进程的同步。2、根据生产者和消费者问题的特性做好软件实现的需要分析。3、可根据问题的实际需要,来改变对信号量的使用及数量和初值的赋值。4、当系统运行时,能直观地、动态地反映当前进程或线程运行的状态和信号量的变化。5、要求系统能满足多进程或多线程的互斥与同步。6、要求在系统安全状态的前提下,兼顾各个进程或线程的公平。三、课程设计的时间安排 课程设计总时间:15学时四、课程设计的实验环境硬件环境:CPU Intel(R) Core2 Duo T5800 2.0GHz,内存 DDR2 2.00GB,硬盘 5400转 160G ,光驱 16X DVD 软件环境:Windows 7 旗舰版, JDK1.6.0_21 五、正文1、实验程序的结构图(流程图);开始ProduceWait BufferWait ProductsConsumeWhile consume结束While produce2、数据结构及信号量定义的说明;(1)class Thread功能:线程类,用于创建并执行线程构造方法:public Thread()作用:分配新的 Thread 对象。(2)boolean available功能:信号量作用:传递生产者与消费者进程之间的开始和等待信号(3)wait()功能:使程序处于等待状态(4)sleep(int n)功能:使线程暂停n毫秒3、实验的步骤;(1)打开Windows系统自带的笔记本程序在任务栏“开始”菜单内“搜索程序和文件”搜索栏内键入“记事本”或者使用快捷键Win+R,打开“运行”对话框,然后键入“notepad”即可快速打开“记事本”程序。(2)创建源文件(类)在记事本内依次创建窗口类(Window)、共享资源类(Share)、生产者类(Producter)、消费者类(Consumer)以及最后的程序入口接入类(PCmx),最后保存为PCmx.java源文件。(3)编译源文件使用快捷键Win+R打开“运行”对话框,键入“cmd”打开控制台窗口,并用DOS命令进入保存有程序源文件的目录,键入“Javac PCmx.java”进行编译,若有错误提示则按照提示对源文件进行查错更改,然后重新进行编译直至无错误提示。(4)运行程序编译成功后,在控制台界面(仍然为源程序目录)内,继续键入“Java PCmx”,运行程序。4、实验源程序关键算法创建共享资源类(Share)class Shareprivate int u;private boolean available=false; /信号量availablepublic JTextArea jt=new JTextArea(生产消费状态:n); /构造成员方法get(),用于向共享资源内取资源public synchronized int get() /使用“synchronized”关键字可以使进程同步while(available=false)trywait();catch(InterruptedException e)jt.append(Share中没有资源,消费者等待n); available=false;notifyAll();jt.append(正在唤醒生产者生产n); return u;/构造成员方法put(),用于向共享资源内放资源public synchronized void put(int value) /使用“synchronized”关键字可以使进程同步while(available=true)trywait();catch(InterruptedException e)jt.append(Share中已有资源,生产者等待n);u=value;available=true;notifyAll();jt.append(正在唤醒消费者消费n);创建生产者线程(Producer)class Producer extends Threadprivate Share shared;public String jieguo=new String11;public JTextArea jt=new JTextArea();/构造方法并对私有成员变量赋值public Producer(Share s)shared=s;/重写父类方法public void run()for(int i=1;i11;i+)shared.put(i);jieguoi=生产者第+i+次生产+ 生产者的生产数据:+i+n;jt.append(jieguoi);trysleep(1000);catch(InterruptedException e)创建消费者线程(Consumer)class Consumer extends Threadprivate Share shared;public String jieguo=new String11; public JTextArea jt=new JTextArea(); /构造方法并对私有变量赋值public Consumer(Share s)shared=s;/重写父类方法public void run()int value=0;/默认十次循环,消费者将从共享资源内取出相应资源for(int i=1;i11;i+) value=shared.get(); jieguoi=消费者第+i+次消费+ 消费者获得的生产数据:+value+n; jt.append(jieguoi); trysleep(1000); catch(InterruptedException e)5、实验运行图;同步运行结果互斥运行结果6、实验结果分析;只有在生产者生产了产品并将产品存放到缓冲池中消费者才能去消费,当缓冲池为空时消费者不能消费六、 结论(应当准确、完整、明确精练;也可以在结论或讨论中提出建议、设想、尚待解决问题等。)七、 参考文献【1】邵丽萍,邵光亚,张后扬编著.Java语言程序设计,清华大学出版社。2008年8月第3版【2】汤小丹,梁红兵,哲凤屏,汤子瀛编著.计算机操作系统,西安电子科技大学出版社。2007年5月第3版八、 指导教师评语 签名: 年 月 日课程设计成绩附:课程设计源代码:import java.awt.*;import java.awt.event.*;import javax.swing.*;/窗口类class window extends JFrame public JFrame jf; public JPanel jp3; public ScrollPane sp1,sp2,sp3; public Container c; window() jf=new JFrame();jp3=new JPanel();sp1=new ScrollPane();sp2=new ScrollPane();sp3=new ScrollPane();c=getContentPane();c.setLayout(new GridLayout(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 类class Shareprivate int u,jishu=0;private boolean available=false; public JTextArea jt=new JTextArea(=生产消费状态=nn); /同步方法 public synchronized int get() jishu+; while(available=false) trywait(); catch(InterruptedException e) jt.append(jishu+ Share中没有资源,消费者等待n); available=false; notifyAll(); jt.append(jishu+ 正在唤醒生产者生产n); return u;public synchronized void put(int value)jishu+;while(available=true)trywait();catch(InterruptedException e)jt.append(jishu+ Share中已有资源,生产者等待n);u=value;available=true;notifyAll();jt.append(jishu+ 正在唤醒消费者消费n);/互斥方法public int hget()jishu+;jt.append(jishu+ 消费者 正在消费资源n);return u;public void hput(int value)jishu+;jt.append(jishu+ 生产者 正在生产资源n); u=value;/生产者类class Producer extends Threadprivate Share shared;public String jieguo=new String11;public JTextArea jt=new JTextArea(=生产者进程=nn);public Producer(Share s)shared=s;public void run()for(int i=1;i11;i+)shared.put(i);jieguoi=i+ 生产者第+i+次生产+ 生产者的生产数据:+i+n;jt.append(jieguoi);try/sleep(int)(Math.random()*100);sleep(1000);catch(InterruptedException e)class hProducer extends Threadprivate Share shared;public String jieguo=new String11;public JTextArea jt=new JTextArea(=生产者线程=nn);public hProducer(Share s)shared=s;public void run()for(int i=1;i11;i+)shared.hput(i);jieguoi=i+ 生产者第+i+次生产+ 生产者的生产数据:+i+n;jt.append(jieguoi);try/sleep(int)(Math.random()*100);sleep(1000);catch(InterruptedException e)/消费者类class Consumer extends Threadprivate Share shared;public String jieguo=new String11; public JTextArea jt=new JTextArea(=消费者线程=nn); public Consumer(Share s)shared=s;public void run()int value=0;for(int i=1;i11;i+)value=shared.get();jieguoi=i+ 消费者第+i+次消费+ 消费者获得的生产数据:+value+n;jt.append(jieguoi);try/sleep(int)(Math.random()*100);sleep(1000);catch(InterruptedException e)class hConsumer extends Threadprivate Share shared;public String jieguo=new String11; public JTextArea jt=new JTextArea(=消费者线程=nn); public hConsumer(Share s)shared=s;public void run()int value=0;for(int i=1;i11;i+)value=shared.hget();jieguoi=i+ 消费者第+i+次消费+ 消费者获得的生产数据:+value+n;jt.append(jieguoi);/*try/sleep(int)(Math.random()*100);sleep(1000);catch(InterruptedException e)*/程序入口public class PCmxpublic static void main(String args)window win=new window();BHandler h=new BHandler();BHandler1 h1=new BHandler1();JButton jb=new JButton(开始同步线程读写);JButton jb1=new JButton(开始互斥线程读写);win.jf.setTitle(生产者与消费者同步与互斥演示);jb.addActionListener(h);jb1.addActionListener(h1);win.jp3.add(jb);win.jp3.add(jb1);h.winadd(win.jf,win.sp1,win.sp2,win.sp3,win.jp3,win.jp3);h1.winadd(win.jf,win.sp1,win.sp2,win.sp3,win.jp3,win.jp3);/同步按钮事件class BHandler implements ActionListenerprivate ScrollPane sp1,sp2,sp3;private JPanel jp1,jp2;private JFrame jf;JTextArea jt1=new JTextArea();JTextArea jt2=new JTextArea();public void actionPerformed(ActionEvent e)jf.setTitle(生产者与消费者的同步与互斥- 同步演示);Share s=new Share();Producer p=new Producer(s);Consumer c=new Consumer(s);sp1.add(p.jt);sp2.add(c.jt);s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度房屋租赁合同(按季度租赁)
- 2025标准房屋买卖合同范本
- 红苋菜养护知识培训
- 2025加强合同管理规范招标代理合作协议
- 流程优化与问题解决指导模板
- 土地流转技术支持合作协议
- 安全与管理培训课件
- 明源软件培训课件
- 企业采购合作框架协议
- 人工智能赋能的2025年智能制造示范工厂建设案例分析报告
- Welcome Unit 开学第一课(课件)高中英语人教版必修第一册
- 人工智能对会计信息披露的挑战与机遇
- 【人教版】二年级上册《道德与法治》全册教案
- 《应用文写作》中职全套教学课件
- 小学英语开学第一课-课件
- 《塑料门窗工程技术规程》JGJ103-2008
- OGSM战略规划框架:实现企业目标的系统化方法论
- (正式版)JBT 9229-2024 剪叉式升降工作平台
- 沃特玛通信基站用铁锂电池
- CPK 生成数据工具
- 建设项目安全设施“三同时”(直接使用版)课件
评论
0/150
提交评论