生产者与消费者算法实现.doc
《生产者与消费者算法实现.doc》由会员分享,可在线阅读,更多相关《生产者与消费者算法实现.doc(17页珍藏版)》请在咨信网上搜索。
1、标准文档课程设计说明书题目: 生产者与消费者算法模拟 院 系: 计算机科学与工程 专业班级: 信息安全(xxxx)班 学 号: 201130xxxx 学生姓名: xxxx 指导教师: xxxx 2013年 xx月 xx 日 xxxx大学课程设计(论文)任务书 计算机 院系 计算机 教研室学 号20113xxxxx学生姓名xxxx专业(班级)xxxxx设计题目生产者与消费者算法模拟设计技术参数(1)系统作业或进程的数目;(2)系统资源的种类和数目;(3)系统作业或进程的对每类资源的最大需求数目;(4)系统作业或进程已分配的资源数目。设计要求(1)检查系统安全状态:根据系统作业或进程的对每类资源的
2、最大需求数目、已分配的资源数目等计算是否存在安全序列。(2)检查系统是否可以继续某个进程资源分配请求。工作量 要求设计说明书的字数在3000字以上。工作计划2012.11.25-11.26 根据课程设计的要求,查找相关资料,完成需求分析;2012.11.26-11.27 进行系统的概要设计;2012.11.27-11.28 进行系统的详细设计和源代码的书写;2013.11.29-11.30 对系统进行调试分析,写出课程设计报告。参考资料1 Cay S.Horstmann,Gary Cornell编著.JAVA核心技术 卷 I.北京:机械工业出版社,2008.2 郑莉编著.Java语言程序设计(
3、第二版).北京:清华大学出版社,2011.3 吕国英等编著.算法设计与分析.北京:清华大学出版社,2009.4 马小军等编.软件工程项目案例与实践指导. 北京:清华大学出版社,2013.5 汤子瀛等编著. 计算机操作系统.西安:西安电子科技大学出版社,2011.指导教师签字教研室主任签字2012年xx月xx日指导教师评语:成绩: 指导教师: 年 月 日xxxx大学课程设计(论文)成绩评定表实用文案目录1.问题描述11.1目的11.2设计要求12.需求分析13. 概要设计13.1程序流程图14. 详细设计24.1程序框架24.1.1生产者与消费者的父类24.1.2 生产者类54.1.3 消费者类
4、64.1.4 主程序入口64.2基本算法分析74.2.1 wait(mutex)与signal()数值信号74.2.2 isBufferEmpty()与isBufferFull()信号74.2.3 produce()存数方法与consume()取数方法85. 调试分析105.1不启动生产者线程测试结果分析105.2不启动消费者线程测试结果分析116. 用户手册117. 测试结果128. 设计体会13参考文献13附录13实用文案1.问题描述1.1目的掌握信号的使用方法和P、V操作的定义,掌握使用P、V操作实现进程之间同步与互斥的方法,加深对进程同步互斥概念的理解。1.2设计要求设计一程序,由一个
5、进程创建三个子进程,三个子进程一个是生产者进程,两个是消费者进程,且要求:l 父子进程都使用父进程创建的共享存储区进行通信,由生产者进程将一个数组中的十个数值发送到由5个缓冲区组成的共享内存中;l 两个消费者进程轮流接收并输出这十个数值,同时将两个消费者进程读出的数值进行累加求各和。l 考虑生产者进程生产的速度和消费者进程速度。2.需求分析生产者-消费者问题是一个著名的进程同步问题。既然有进程间的同步,也就必将涉及到进程之间的互斥与通信问题,对于这个问题的解决有着很强的现实意义。它的现实意义在于可以类比到计算机中对于临界资源的互斥共享。生产者与消费者就好比是对计算机临界资源访问的程序或用户,而
6、临界资源如打印机、磁带机等设备。3. 概要设计3.1程序流程图说明:图3.1 程序流程图所示,首先生产者与消费者线程创建,便就去访问缓冲区。对于生产者若缓冲区没有被其他线程访问,且缓冲区未满则生产数据存放到缓冲区,若其中有一条件没有满足则生产者线程进入阻塞状态。而对于消费者同样也需要缓冲区没有被其他线程访问,但同时要求缓冲区未空才能从缓冲区取数据,若其中有一个条件为满足则同样进入阻塞状态。“生产者”线程创建“消费者”阻塞“生产者”向缓冲区放入数据否是否有线程访问缓冲区否是是“消费者”或“生产者”阻塞缓冲区是否满否是否有线程访问缓冲区是缓冲区是否空否“消费者”线程创建“生产者”阻塞“消费者”从缓
7、冲区中取数图3.1 程序流程图4. 详细设计4.1程序框架4.1.1生产者与消费者的父类public class SuperThread extends JPanel/定义缓冲区的读写锁private Lock bufferLock;/ 共享缓冲区public static IntBuffer buffer = IntBuffer.allocate(5);/生产者数组public int array = 1,5,6,9,8,11,13,10,7,3;/生产者执行的次数public static int count = 0;/两个生产者取出数据的累加public static int consu
8、merSum = 0;/记录消费者取数次数public static int consumerCount = 0;/存放从缓冲区中取得的数据private static int consumerData;/定义线程名public String nameString;/线程互斥信号,值为 0 表示生产者进程,值为 1 表示消费者进程public static int mutex = 0;/* 构造函数 */public SuperThread(String name)/主要完成一些变量的初始化/* 获得线程名 */public String getNameString() return name
9、String;/* 设置线程名 */public void setNameString(String nameString) this.nameString = nameString;/* 获得互斥信号 */public static int getMutex() return mutex;/* 设置互斥信号 */public static void setMutex(int mutex) SuperThread.mutex = mutex;/* 判断是否有线程访问缓冲区,没有则对线程进行加锁 */public boolean wait(int mutex)if (mutex = 1) ret
10、urn false;else return true;/* 释放进程操作完成信号,其实本质就是修改mutex的信号值 */public static void signal()mutex = 0;/* 判断缓冲区是否为空 */public boolean isBufferEmpty()/根据缓冲区中是否有0存在来判断是否为空/若0的个数为5则为空,反之则不为空/* 判断缓冲区是否为满 */public boolean isBufferFull()/根据缓冲区中是否有0存在来判断是否为空/若0的个数为0则为满,反之则不满/* 消费数,即在缓冲区中取数 */public void consume(
11、)if (wait(mutex) & !isBufferEmpty() /判断是否访问缓冲区/加锁bufferLock.lock();try /设置互斥信号/从缓冲区取数/将取数后的缓冲区置0/释放互斥信号finally/解锁bufferLock.unlock();/* 消费者取得缓冲区数据*/public int getBufferData(int index)/完成取数操作return data;/* 生产数,即向缓冲区中存数*/public void produce()if (wait(mutex) & !isBufferFull() /判断是否访问缓冲区bufferLock.lock(
12、);/加锁try/设置互斥信号/向缓冲区存数/释放互斥信号finally/解锁bufferLock.unlock();/* 生产者向公共缓冲区放数据*/public void putBufferData(int index)/完成想缓冲区存数操作4.1.2 生产者类public class Producer extends SuperThread implements Runnable/ 生产者休眠时间private int producerDelay;/* 生产者构造函数 */public Producer(String name) super(name);/* 获得生产者休眠时间 */pu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 生产者 消费者 算法 实现
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【人****来】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【人****来】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。