ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:34.42KB ,
资源ID:1112114      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/1112114.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(生产者消费者问题设计与实现.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

生产者消费者问题设计与实现.docx

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

2、实现;及3.编写应用程序测试生产者消费者问题,并显示结果。任三、项目设计(研究)思路务本课程设计的基本思路是,首先理解和掌握生产者消费者问题的基本思想和原理,然后根据理解的基本思想和原理编程实现生产者消费者问题,最后通过数据分析生产者消费者问题。四、具体成果形式和要求成果:生产者消费者问题程序语言实现;设计说明书。要求:编写好的生产者消费者问题程序能够正确启动运行;设计说明书规范、合理。进起止日期工作内容度2015.6.23 至 2015.6.24熟悉相关内容安2015.6.25 至 2015.6.26系统设计和实现排2015.6.27 至 2015.6.29系统实现和撰写相关文档主 要 参

3、考 资 料1.计算机操作系统汤子瀛哲凤屏 汤小丹主编西安电子科技大学出 版社2.计算机操作系统概论陈宏杨忠耀主编重庆邮电大学出版社.3.计算机操作系统基本知识廖成 崔阳主编电子工业出版社.4操作系统实现与设计陆刚望能主编电子工业出版社.5.java程序语言设计丁振凡主编,薛清华副主编清华大学出版社 .指导教师意见(签字): 年 月曰系(教研室)主任意见(签字):年 月曰1.选题背景 12.设计思路 13.过程讨论 14.结果分析 75.结论 8参考文献 9致谢 1.0 附录 1.0 指导教师评语 错 误 ! 未定义书签。成绩评定 错.误 !.未. 定义书签。1.选题背景生产者消费者问题是研究多

4、线程程序时绕不开的经典问题之一,它描述是有 一块缓冲区作为仓库,生产者可以将产品放入仓库,消费者则可以从仓库中取走 产品。解决生产者/消费者问题的方法可分为两类:(1)采用某种机制保护生产 者和消费者之间的同步;(2)在生产者和消费者之间建立一个管道。第一种方 式有较高的效率,并且易于实现,代码的可控制性较好,属于常用的模式。第二 种管道缓冲区不易控制,被传输数据对象不易于封装等,实用性不强。 因此本文只介绍同步机制实现的生产者/消费者问题。同步问题核心在于:如何保证同一资源被多个线程并发访问时的完整性。常 用的同步方法是采用信号或加锁机制,保证资源在任意时刻至多被一个线程访 问。Java语言

5、在多线程编程上实现了完全对象化,提供了对同步机制的良好支 持。在Java中一共有四种方法支持同步,其中前三个是同步方法,一个是管道 方法。2.设计思路2.1.生产者一消费者问题是一种同步问题的抽象描述。2.2 计算机系统中的每个进程都可以消费或生产某类资源。当系统中某一进程使用某一资源时,可以看作是消耗,且该进程称为消费者。2.3而当某个进程释放资源时,则它就相当一个生产者3.过程论述首先,生产者和消费者可能同时进入缓冲区,甚至可能同时读 /写一个存储单元,将导致执行结果不确定。这显然是不允许的。所以,必须使生产者和消费 者互斥进入缓冲区。即某时刻只允许一个实体(生产者或消费者)访问缓冲区,

6、生产者互斥消费者和其他任何生产者。其次,生产者不能向满的缓冲区写数据,消费者也不能在空缓冲区中取数据, 即生产者与消费者必须同步。当生产者产生出数据,需要将其存入缓冲区之前, 首先检查缓冲区中是否有“空”存储单元,若缓冲区存储单元全部用完,则生产 者必须阻塞等待,直到消费者取走一个存储单元的数据,唤醒它。 若缓冲区内有“空”存储单元,生产者需要判断此时是否有别的生产者或消费者正在使用缓冲 区,若是有,则阻塞等待,否则,获得缓冲区的使用权,将数据存入缓冲区,释 放缓冲区的使用权。消费者取数据之前,首先检查缓冲区中是否存在装有数据的 存储单元,若缓冲区为“空”,则阻塞等待,否则,判断缓冲区是否正在

7、被使用, 若正被使用,若正被使用,则阻塞等待,否则,获得缓冲区的使用权,进入缓冲区取数据,释放缓冲区的使用权3.1系统流程图3.1.1生产者流程图:3.1.2消费者流程图:3.1.3主程序流程图:3.1.4生产者:ProducerThread/ 定义生产者线程class ProducerThread implements Runnable int productNo = 0; / 产品编号 int id ; / 生产者 ID public ProducerThread( int id) this .id = id ;public void run() while ( isRun ) produ

8、ctNo +; / 生产产品 buffers .put( productNo , id ); / 将产品放入缓冲队列 try Thread. sleep (1000); catch (Exception e) e.printStackTrace(); 3.1.5消费者 ConsumerThread/ 定义消费者线程class ConsumerThread implements Runnable int id ; / 消费者 ID public ConsumerThread( int id) this .id = id ;public void run() while ( isRun ) buf

9、fers .get( id ); / 从缓冲队列中取出产品 try Thread. sleep (1000); catch (Exception e) e.printStackTrace();3.1.6缓冲区 Buffer class Buffer JTextArea ta;static final int productBufferNum = 10; / 缓冲单元数 ProductBuffer pBuffer = new ProductBuffer productBufferNum ; / 缓冲队列int in = 0; / 缓冲单元指针,用于放产品 get()int out = 0; /

10、缓冲单元指针,用于取产品 put()int consumeProductNo; / 记录消费产品的编号int usedBufferNum = 0; / 记录缓冲队列已使用的缓冲单元个数public Buffer (JTextArea ta)this .ta = ta ;/ 初始化for (int j =0; j productBufferNum ; j +)pBuffer j = newProductBuffer();for (int i =0; i productBufferNum ; i +)pBuffer i . product = -1;pBuffer i . hasProduct =

11、 false ;/ 取产品public synchronized void get( int id )/ 缓冲队列空则等待if ( usedBufferNum = 0)try super .wait(); catch (Exception e) e.printStackTrace();consumeProductNo= pBuffer out. product ; / 取出产品 pBuffer out. product = 0; / 清空缓冲单元 pBuffer out. hasProduct = false ; / 置无产品 标识 usedBufferNum-;/ 输出本次取产品后缓冲队列的

12、情况ta .append(消费者+id +将产品+consumeProductNoT 从缓冲单元 +out +取出,缓冲队列状态如下: n );printBuffer();out=(out+1)%productBufferNum ; / 更新指针/ 唤醒等待线程super .notify();/ 放产品public synchronized void put( int productNo, int id)/ 缓冲队列满则等待if ( usedBufferNum = productBufferNum )try super .wait(); catch (Exception e)e.printSt

13、ackTrace();pBuffer in . product = productNo ; / 放产品pBuffer in . hasProduct = true ; / 置“有产品”标识 usedBufferNum+;/ 输出本次放入产品后,缓冲队列的情况ta .append(生产者+id +将产品+productNo +放入缓冲单元+in +, 缓冲队列状态如下: n );printBuffer();in=(in +1)%productBufferNum ; / 更新指针/ 唤醒等待线程super.notify();/ 打印缓冲队列当前情况private void printBuffer(

14、)ta.append( 缓冲单元编号 产品编号缓冲单元状态 n );for (int i =0; i productBufferNum ; i +)ta.append( t +i +t +pBuffer i . product +t +pBuffer i . hasProdu ct +n );/* 一个缓冲单元*/class ProductBuffer int product ; / 存放产品编号boolean hasProduct; / 标识该缓冲区是否有产品, true 有产品, false 无产品3.1.7图形界面 createUIpublic void createUI()JFrame frame = new JFrame( 生产者消费者 );JPanel panel = new JPanel( newBorderLayout(); /ta.setBackground(Color.blue);JScrollPane scrPane = new JScrollPane( ta); panel .add( scrPa

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1