生产者消费者问题设计与实现.doc
《生产者消费者问题设计与实现.doc》由会员分享,可在线阅读,更多相关《生产者消费者问题设计与实现.doc(14页珍藏版)》请在咨信网上搜索。
1、 操作系统 课程设计任务书 学 院计算机与信息工程专 业计算机科学与技术课程名称操作系统题 目生产者消费者问题设计与实现完成期限自2015年6月23日至2015年6月29日共1周内容及任务一、项目的目的1。理生产者消费者问题基本概念和工作原理,以及实现技术;2.理解并掌握生产者消费者问题相关算法,以及它的实现方法;3.掌握在eclipse环境下,系统开发的基本步骤和方法;4。掌握在eclipse环境下,设计和开发一个简单的生产者消费者问题系统来模拟操作系统中生产者消费者问题。二、项目任务的主要内容和要求1。精读并理解和掌握生产者消费者问题;2.编写程序来模拟生产者消费者问题的实现;3。编写应用
2、程序测试生产者消费者问题,并显示结果。三、项目设计(研究)思路本课程设计的基本思路是,首先理解和掌握生产者消费者问题的基本思想和原理,然后根据理解的基本思想和原理编程实现生产者消费者问题,最后通过数据分析生产者消费者问题.四、具体成果形式和要求 成果:生产者消费者问题程序语言实现;设计说明书。要求:编写好的生产者消费者问题程序能够正确启动运行;设计说明书规范、合理。进度安排起止日期工作内容2015.6。23至2015.6.24熟悉相关内容2015.6.25至2015。6.26系统设计和实现2015。6。27至2015.6.29系统实现和撰写相关文档主要参考资料1。计算机操作系统汤子瀛哲凤屏 汤
3、小丹主编 西安电子科技大学出版社。2。计算机操作系统概论陈宏 杨忠耀主编 重庆邮电大学出版社。3.计算机操作系统基本知识廖成 崔阳 主编 电子工业出版社.4。操作系统实现与设计陆刚 望能主编 电子工业出版社。5。java程序语言设计丁振凡主编,薛清华副主编清华大学出版社.指导教师意见(签字): 年 月 日系(教研室)主任意见(签字): 年 月 日目录1.选题背景12。设计思路13。过程讨论14。结果分析115。结论12参考文献13致谢13附录14指导教师评语19成绩评定191。选题背景生产者消费者问题是研究多线程程序时绕不开的经典问题之一,它描述是有一块缓冲区作为仓库,生产者可以将产品放入仓库
4、,消费者则可以从仓库中取走产品。解决生产者/消费者问题的方法可分为两类:(1)采用某种机制保护生产者和消费者之间的同步;(2)在生产者和消费者之间建立一个管道.第一种方式有较高的效率,并且易于实现,代码的可控制性较好,属于常用的模式。第二种管道缓冲区不易控制,被传输数据对象不易于封装等,实用性不强。因此本文只介绍同步机制实现的生产者/消费者问题。同步问题核心在于:如何保证同一资源被多个线程并发访问时的完整性。常用的同步方法是采用信号或加锁机制,保证资源在任意时刻至多被一个线程访问。Java语言在多线程编程上实现了完全对象化,提供了对同步机制的良好支持。在Java中一共有四种方法支持同步,其中前
5、三个是同步方法,一个是管道方法。2设计思路 2。1。生产者消费者问题是一种同步问题的抽象描述。 2.2计算机系统中的每个进程都可以消费或生产某类资源。当系统中某一进程使用某一资源时,可以看作是消耗,且该进程称为消费者。2.3而当某个进程释放资源时,则它就相当一个生产者3.过程论述首先,生产者和消费者可能同时进入缓冲区,甚至可能同时读/写一个存储单元,将导致执行结果不确定。这显然是不允许的。所以,必须使生产者和消费者互斥进入缓冲区。即某时刻只允许一个实体(生产者或消费者)访问缓冲区,生产者互斥消费者和其他任何生产者。 其次,生产者不能向满的缓冲区写数据,消费者也不能在空缓冲区中取数据,即生产者与
6、消费者必须同步。当生产者产生出数据,需要将其存入缓冲区之前,首先检查缓冲区中是否有“空存储单元,若缓冲区存储单元全部用完,则生产者必须阻塞等待,直到消费者取走一个存储单元的数据,唤醒它。若缓冲区内有“空”存储单元,生产者需要判断此时是否有别的生产者或消费者正在使用缓冲区,若是有,则阻塞等待,否则,获得缓冲区的使用权,将数据存入缓冲区,释放缓冲区的使用权.消费者取数据之前,首先检查缓冲区中是否存在装有数据的存储单元,若缓冲区为“空”,则阻塞等待,否则,判断缓冲区是否正在被使用,若正被使用,若正被使用,则阻塞等待,否则,获得缓冲区的使用权,进入缓冲区取数据,释放缓冲区的使用权。3。1系统流程图3。
7、1。1生产者流程图:3.1。2消费者流程图:3。1.3主程序流程图:3。1.4生产者:ProducerThread /定义生产者线程class ProducerThread implements Runnable int productNo = 0; /产品编号int id; /生产者IDpublic ProducerThread(int id)this。id = id;public void run()while(isRun)productNo+; /生产产品buffers。put(productNo, id); /将产品放入缓冲队列tryThread.sleep(1000);catch(E
8、xception e)e.printStackTrace();3.1.5消费者 ConsumerThread /定义消费者线程class ConsumerThread implements Runnable int id; /消费者IDpublic ConsumerThread(int id)this。id = id;public void run()while(isRun)buffers.get(id); /从缓冲队列中取出产品tryThread.sleep(1000);catch(Exception e)e。printStackTrace();3。1.6缓冲区Buffer class Bu
9、ffer JTextArea ta;static final int productBufferNum = 10; /缓冲单元数ProductBuffer pBuffer = new ProductBufferproductBufferNum; /缓冲队列int in = 0; /缓冲单元指针,用于放产品get()int out = 0; /缓冲单元指针,用于取产品put()int consumeProductNo; /记录消费产品的编号int usedBufferNum = 0; /记录缓冲队列已使用的缓冲单元个数public Buffer (JTextArea ta)this。ta = t
10、a;/初始化for(int j=0; jproductBufferNum; j+)pBufferj = new ProductBuffer();for(int i=0; iproductBufferNum; i+)pBufferi.product = 1;pBufferi。hasProduct = false;/取产品public synchronized void get(int id)/缓冲队列空则等待if(usedBufferNum = 0)trysuper.wait();catch(Exception e)e。printStackTrace();consumeProductNo = p
11、Bufferout.product; /取出产品pBufferout。product = 0; /清空缓冲单元pBufferout。hasProduct = false; /置无产品”标识usedBufferNum-;/输出本次取产品后缓冲队列的情况ta。append(消费者+id+”将产品+consumeProductNo+”从缓冲单元+out+”取出,缓冲队列状态如下:n);printBuffer();out=(out+1)%productBufferNum; /更新指针/唤醒等待线程super。notify();/放产品public synchronized void put(int p
12、roductNo, int id)/缓冲队列满则等待if(usedBufferNum = productBufferNum)trysuper.wait();catch(Exception e)e.printStackTrace();pBufferin.product = productNo; /放产品pBufferin。hasProduct = true; /置“有产品”标识usedBufferNum+;/输出本次放入产品后,缓冲队列的情况ta。append(”生产者”+id+将产品+productNo+”放入缓冲单元+in+,缓冲队列状态如下:n”);printBuffer();in=(in
13、+1)productBufferNum; /更新指针/唤醒等待线程super.notify();/打印缓冲队列当前情况private void printBuffer()ta.append(” 缓冲单元编号 产品编号 缓冲单元状态n);for(int i=0; iproductBufferNum; i+)ta。append(t”+i+t+pBufferi.product+t+pBufferi。hasProduct+n);/一个缓冲单元*/class ProductBuffer int product; /存放产品编号boolean hasProduct; /标识该缓冲区是否有产品,true有产
14、品,false无产品3.1.7图形界面createUIpublic void createUI()JFrame frame = new JFrame(”生产者消费者”);JPanel panel = new JPanel(new BorderLayout();/ta。setBackground(Color。blue);JScrollPane scrPane = new JScrollPane(ta);panel。add(scrPane, BorderLayout。CENTER);JButton button = new JButton(”停止);button。addActionListener
15、(this);panel.add(button, BorderLayout.SOUTH);panel.setBackground(Color。BLUE);frame.add(panel);frame.setVisible(true);frame。setSize(1000,500);frame.setDefaultCloseOperation(JFrame。EXIT_ON_CLOSE);3。1。8事件驱动actionPerformed/按钮响应事件public void actionPerformed(ActionEvent e)isRun = false; /控制线程结束System。out。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 生产者 消费者 问题 设计 实现
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【w****g】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【w****g】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。