课程设计生产者消费者问题(模板)_第1页
课程设计生产者消费者问题(模板)_第2页
课程设计生产者消费者问题(模板)_第3页
课程设计生产者消费者问题(模板)_第4页
课程设计生产者消费者问题(模板)_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、 操作系统课程设计(一号黑体加粗)用多进程同步方法解决生产者-消费者问题 (小二黑体加粗)院 系: 信息工程学院 班 级: 信工(2)班 学 号: xxxxxxxx 姓 名: xx 同 组 者: 本人 时 间: 2011/12/8 目录(小二黑体加粗)操作系统课程设计(一号黑体加粗)1目录(小二黑体加粗)2一、题目:(标题2,即三号黑体加粗)2二、设计目的:3三、总体设计思想概述:3四、说明:3五、设计要求:3六、设计方案:3七、流程图:3八、运行结果4九 源程序6十、总结10十一、参考文献11一、题目:(标题2,即三号黑体加粗)用多进程同步方法解决生产者-消费者问题。二、设计目的:通过研究l

2、inux 的进程机制和信号量实现生产者消费者问题的并发控制。三、总体设计思想概述:1、 生产者消费者问题是一种同步问题的抽象描述。2、 计算机系统中的每个进程都可以消费或生产某类资源。当系统中某一进程使用某一资源时,可以看作是消耗,且该进程称为消费者。3、 而当某个进程释放资源时,则它就相当一个生产者。四、说明:有界缓冲区内设有20个存储单元,放入/取出的数据项设定为1-20这20个整型数。五、设计要求:1、每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容,当前指针位置和生产者/消费者进程的标识符。2、生产者和消费者各有两个以上。3、多个生产者或多个消费者之间须有共享对缓

3、冲区进行操作的函数代码。六、设计方案: 1、生产者仅仅在仓储未满时候生产,仓满则停止生产。 2、消费者仅仅在仓储有产品时候才能消费,仓空则等待。 3、当消费者发现仓储没产品可消费时候会通知生产者生产。 4、生产者在生产出可消费产品时候,应该通知等待的消费者去消费。 5、此模型将要结合java.lang.object的wait与notify、notifyall方法来实现以上的需求。七、流程图: 开始producewait bufferwait productsconsume结束while producewhile consume八、运行结果1、截图一: 生产者线程开始生产、消费者线程随后消费及生

4、产者或消费者执行生产操作后缓冲区当前状态的截图:2、截图二: 缓冲区已满,信号量empty0生产者线程进入等待队列的截图:上图的辅助解释图:缓冲区的20个存储单元满时缓冲区的状态的截图:3、截图三: 生产者线程producerthread_0完成自己的任务后,该线程撤销的截图: 4、截图四: 消费者执行消费操作后的缓冲区的状态的部分截图:5、截图五: 生产消费完毕的截图:九 源程序/* * (#)producerconsumer.java * * * author * version 1.00 2011/12/12 */class buffer / 有界缓冲区int array = new i

5、nt21; / 设置缓冲区的大小为20个存储单元int full = 0; / 缓冲区里产品的数目 初始值为0int empty = 20; / 缓冲区里还剩空位置的数目 初始值为20 /int empty = array.length;public synchronized void push(int i) / 生产数据项操作,即p操作(通过syschoronized实现有节缓冲区的互斥操作) while (empty = 0) try system.out.println(缓冲区已满,生产者线程进入等待队列);this.wait(); catch (interruptedexception

6、 e) e.printstacktrace(); notify(); system.out.println(thread.currentthread().getname() + 生产: +i);full+;empty-;arrayfull = i; / 送一个产品到有界缓冲区system.out.println(full:+full+tempty:+empty+t生产者线程执行操作后,缓冲区当前的数据为:);for (int j = 1; j = full; j+) system.out.print(arrayj+t );system.out.println();public synchron

7、ized void pop() / 消费数据项操作,即v操作(通过syschoronized实现有节缓冲区的互斥操作)while(full = 0) try system.out.println(缓冲区里没有供消费的产品,消费者线程进入等待队列。);this.wait(); catch (interruptedexception e) e.printstacktrace();notify();system.out.println(thread.currentthread().getname() + 消费: + arrayfull);empty+;full-;system.out.println

8、(消费者线程执行操作后,缓冲区当前的数据为:);for (int j = 1; j = full; j+) system.out.print(arrayj+t);system.out.println(); class producer implements runnable / 实现runnble的生产者private buffer bf ;producer(buffer bf) this.bf = bf;public void run() for(int i=1; i=20; i+)bf.push(i);try thread.sleep(int) (math.random() * 2000)

9、; catch (interruptedexception e) e.printstacktrace();system.out.println(thread.currentthread().getname()+ 线程完成自己的任务,该线程消亡!);class consumer implements runnable / 实现runnble的消费者private buffer bf ;consumer(buffer bf) this.bf = bf;public void run() for(int i=1; i=20; i+) bf.pop();try thread.sleep(int) (m

10、ath.random() * 4000); catch (interruptedexception e) e.printstacktrace();system.out.println(thread.currentthread().getname()+ 线程完成自己的任务,该线程消亡!);public class producerconsumer public producerconsumer() public static void main(string args) buffer bf = new buffer(); / 初始化有界缓冲区producer p = new producer(b

11、f);consumer c = new consumer(bf); / new生产者thread thread_0 = new thread(p);thread thread_1 = new thread(p);thread thread_2 = new thread(p);thread_0.setname(producerthread_0);thread_1.setname(producerthread_1);thread_2.setname(producerthread_2);thread thread_3 = new thread(c);thread thread_4 = new thr

12、ead(c);thread_3.setname(consumerthread_0);thread_4.setname(consumerthread_1);system.out.println(生产消费模拟开始:);thread_0.start();thread_1.start();thread_2.start();thread_3.start();thread_4.start(); 十、总结对于多线程程序来说,不管任何编程语言,生产者和消费者模型都是最经典的。就像学习每一门编程语言一 样,hello world!都是最经典的例子。在此之前,我们学习过java中的多线程机制,可是那时候的线程机制是简单且较为容易理解的,但是这次实验不一样,它要求用多个线程,于是我很长一段时间都在犯

温馨提示

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

评论

0/150

提交评论