生产者消费者问题设计与实现_第1页
生产者消费者问题设计与实现_第2页
生产者消费者问题设计与实现_第3页
生产者消费者问题设计与实现_第4页
生产者消费者问题设计与实现_第5页
免费预览已结束,剩余5页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程设计任务书计算机与信息工程计算机科学与技术课程名称操作系统生产者消费者问题设计与实现完成期限自2015年6月23日至2015年6月29日共1周 一、项目的目的1. 理生产者消费者问题基本概念和工作原理,以及实现技术;2. 理解并掌握生产者消费者问题相关算法,以及它的实现方法;3. 掌握在eclipse环境下,系统开发的基本步骤和方法;4. 掌握在eclipse环境下,设计和开发一个简单的生产者消费者问题系 统来模拟操作系统中生产者消费者问题。、项目任务的主要内容和要求1. 精读并理解和掌握生产者消费者问题;2. 编写程序来模拟生产者消费者问题的实现;3. 编写应用程序测试生产者消费者问题,

2、并显示结果。三、项目设计(研究)思路本课程设计的基本思路是,首先理解和掌握生产者消费者问题的基 本思想和原理,然后根据理解的基本思想和原理编程实现生产者消费者 问题,最后通过数据分析生产者消费者问题。四、具体成果形式和要求成果:生产者消费者问题程序语言实现;设计说明书。要求:编写好的生产者消费者问题程序能够正确启动运行;设计说 明书规范、合理。起止日期工作内容熟悉相关内容系统设计和实现系统实现和撰写相关文档主要参考 资 料1. 计算机操作系统汤子瀛哲凤屏 汤小丹主编 西安电子科技大学出 版社.2. 计算机操作系统概论陈宏杨忠耀主编重庆邮电大学出版社.3. 计算机操作系统基本知识廖成崔阳主编电子

3、工业出版社.4. 操作系统实现与设计陆刚望能主编电子工业出版社.5. java程序语言设计丁振凡主编,薛清华副主编清华大学出版社 .指导教师意见(签字):年 月曰系(教研室)主任意见(签字):年 月 日目录1. 选题背景生产者消费者问题是研究多线程程序时绕不开的经典问题之一,它描述是有 一块缓冲区作为仓库,生产者可以将产品放入仓库,消费者则可以从仓库中取走 产品。解决生产者/消费者问题的方法可分为两类:(1)采用某种机制保护生产 者和消费者之间的同步;(2)在生产者和消费者之间建立一个管道。第一种方 式有较高的效率,并且易于实现,代码的可控制性较好,属于常用的模式。第二 种管道缓冲区不易控制,

4、被传输数据对象不易于封装等,实用性不强。因此本文只介绍同步机制实现的生产者/消费者问题。同步问题核心在于:如何保证同一资源被多个线程并发访问时的完整性。常 用的同步方法是采用信号或加锁机制,保证资源在任意时刻至多被一个线程访 问。Java语言在多线程编程上实现了完全对象化,提供了对同步机制的良好支 持。在Java中一共有四种方法支持同步,其中前三个是同步方法,一个是管道 方法。2. 设计思路生产者一消费者问题是一种同步问题的抽象描述。计算机系统中的每个进程都可以消费或生产某类资源。 当系统中某一进程使 用某一资源时,可以看作是消耗,且该进程称为消费者。而当某个进程释放资源时,则它就相当一个生产

5、者3. 过程论述首先,生产者和消费者可能同时进入缓冲区,甚至可能同时读/写一个存储单元,将导致执行结果不确定。这显然是不允许的。所以,必须使生产者和消费 者互斥进入缓冲区。即某时刻只允许一个实体(生产者或消费者)访问缓冲区, 生产者互斥消费者和其他任何生产者。其次,生产者不能向满的缓冲区写数据,消费者也不能在空缓冲区中取数据, 即生产者与消费者必须同步。当生产者产生出数据,需要将其存入缓冲区之前, 首先检查缓冲区中是否有“空”存储单元,若缓冲区存储单元全部用完,则生产 者必须阻塞等待,直到消费者取走一个存储单元的数据,唤醒它。若缓冲区内有 “空”存储单元,生产者需要判断此时是否有别的生产者或消

6、费者正在使用缓冲 区,若是有,则阻塞等待,否则,获得缓冲区的使用权,将数据存入缓冲区,释 放缓冲区的使用权。消费者取数据之前,首先检查缓冲区中是否存在装有数据的 存储单元,若缓冲区为“空”,则阻塞等待,否则,判断缓冲区是否正在被使用,若正被使用,若正被使用,则阻塞等待,否则,获得缓冲区的使用权,进入缓冲 区取数据,释放缓冲区的使用权。系统流程图消费者流程图: 主程序流程图: roduct = -1;pBuffer i . hasProduct = false ;roduct ;= true ;/*一个缓冲单元*/class ProductBuffer roduct = 0; asProduct

7、 = false ; roduct = productNo ; roduct +"t" +pBufferi.hasProduct+"n" );asProductint product ; 果分析运行主程序得到一个 GUI 窗口,在文本域中输出结果,一共10 个缓冲单元,三个生产者随机生产产品依次从 0 编号的缓冲区放入产品, 照生产的先后顺序消费产品。消费者按当缓冲单元有产品时,状态栏显示 true ,否则显示 false 。并且当消费 者取走产品后,产品编号会变成 0.5. 结论这次生产者与消费者之间的关系的实验我用Java语言编写的,用关键字sync

8、hronized 来实现多个线程同步, 用继承 Thread 来将生产者线程与消费者线 程实例化。其实,在做这个实验之前我的 Java 语言编程老师讲过这些知识,正好可以巩固Java的一些知识。我还学过 C+语言,这是大一下学期学的事了, 我想要实现书上的P、V操作可以用C+语言来编写。?总之,通过该实验我更 加清楚的认识到生产者与消费者这个经典问题实际上是线程同步问题的抽象描述,即计算机系统中的每个进程都可以消费(使用)或生产(释放)数据,进程释放数据相当于生产者,使用数据相当于消费者。从 Java 的多线程机制出发 , 研究了操作系统中经典的同步问题生产者消 费者问题,提出了两种解决此问题

9、的模型,及其Java解决方案。提出的两个模 型充分利用了 Java 中面向对象和管程机制 , 模拟了操作系统中进程同步的经典 问题生产者消费者问题。 在第一个模型中 , 我们按照生产者消费者问题典型的 解决方案给出了 Java 解决模型 ; 在第二个模型中 , 我们分析了信号量 mutex在问题中所起的作用 , 并为了提高缓冲区读写的效率 , 提出了将信号量 mutex分为两个分别控制生产者和消费者的信号量 , 并讨论了此方案的可行性。参考文献12345计算机操作系统 汤子瀛哲凤屏 汤小丹主编 西安电子科技大学出版社 计算机操作系统概论陈宏 杨忠耀主编 重庆邮电大学出版社 计算机操作系统基本知

10、识廖成 崔阳 主编 电子工业出版社 操作系统实现与设计陆刚 望能主编 电子工业出版社 java 程序语言设计丁振凡主编,薛清华副主编清华大学出版社致谢本组全体成员在此向所有关心我们的及帮助我们的老师和同学们致以最真 诚的感谢。在本次毕业设计中, 尤其要感谢杨传健老师, 对我们的课程设计时刻 的关注,当我们遇到困难时给了我们很大的帮助,交给了我们团队的合作理念, 使得我们能够按时完成这次的课程设计。填表日期:年月日学生签名:附录importimportimportimportimportimportimportimportimportroduct = -1;pBuffer i . hasProd

11、uct = false ;roduct ; roduct = 0; asProduct = false ; roduct = productNo ;asProduct=true ; roduct +"t" +p Buffer i . has Product +"n");/*一个缓冲单元*/class ProductBuffer int product ; tart();(int j =0; j vconsumerNum j +)con Thread j = n ewC on sumerThread(j +1); con sumer j = n ewThr

12、ead( con Thread j ); consumeij j .start();forvoid createNewUlO privateJFrame frame =new JFrame( "Leo");/创建界面public void createUI()JFrame frame = new JFrame("生产者消费者");JPanel panel = newJPanel( newBorderLayout(); /;JScrollPane scrPane = new JScrollPane( ta);(scr Pane,;JButton butto

13、n = new JButton("停止");(this );(button ,;(pan el); (true );(1000,500);按钮响应事件/public void actionPerformed(ActionEvente)isRun = false ;/控制线程结束"停止");p ublic static void main( Stri ngargs )Producer_and_Customer producerConsumer = new P roducer_a nd_Customer();""/定义生产者线程class ProducerThreadint p roductNo = 0;int id ;implements Runnable /产品编号/生产者IDProducerThread( int id ) id;public p ublicvoid run() while (isRun)p roductNo +;/(productNo , id ); try (1000); catch (Exception();/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论