利用管程 pv信号量 java解决生产者消费者问题 操作系统课程设计

上传人:luoxia****01801 文档编号:62516213 上传时间:2018-12-21 格式:PPT 页数:12 大小:289KB
返回 下载 相关 举报
利用管程 pv信号量 java解决生产者消费者问题 操作系统课程设计_第1页
第1页 / 共12页
利用管程 pv信号量 java解决生产者消费者问题 操作系统课程设计_第2页
第2页 / 共12页
利用管程 pv信号量 java解决生产者消费者问题 操作系统课程设计_第3页
第3页 / 共12页
利用管程 pv信号量 java解决生产者消费者问题 操作系统课程设计_第4页
第4页 / 共12页
利用管程 pv信号量 java解决生产者消费者问题 操作系统课程设计_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《利用管程 pv信号量 java解决生产者消费者问题 操作系统课程设计》由会员分享,可在线阅读,更多相关《利用管程 pv信号量 java解决生产者消费者问题 操作系统课程设计(12页珍藏版)》请在金锄头文库上搜索。

1、操作系统课程设计算法汇报,核心数据结构(1),一、信号量类,类的属性: Value;/信号量值,类的方法:,(1)public Semaphore(int semValue) /构造函数,(2)public synchronized void p() /模拟P操作的函数,(3)public synchronized void v() /模拟V操作的函数,属性,Value,方法,2,1,3,核心数据结构(1)主要方法,public synchronized void p() /P操作(即申请资源) Value-;(信号量值减1) if(Value0)/没有可用资源 try this.wait()

2、; /因资源不足而阻塞自己 catch(InterruptedException e) ,P操作模拟函数,public synchronized void v()/V操作 Value+; if(Value=0) this.notify(); /释放一个等待资源的线程 ,V操作模拟函数,核心数据结构(2),一、管程类,类的属性:,类的方法:,(1)public InterfaceModule(Main frame)/ 构造函数,(2)public void enter()/进入管程,(3)public void leave()/离开管程,(4)public void Wait(Semaphore

3、 x_sem,Count x_count) /wait 函数,(5)public void Signal(Semaphore x_sem,Count x_count) /Signal 函数,private Semaphore mutex;/进程调用管程之前所使用的互斥信号量,private Semaphore next;/发出signal操作的线程挂起自己的信号量,int next_count;/在next上等待的线程数,核心数据结构(2)主要方法,(1)public void enter() mutex.p();/互斥的进入管程 /System.out.print(“n进入管程n“); ,(

4、2)public void leave() if(next_count0)/判断有否发出signal操作的线程 next.v();/若有就释放一个 else mutex.v();/否则开放管程 frame.a1.append(“开放管程n“); /System.out.print(“n离开管程n“); ,核心数据结构(2)主要方法,public void Wait(Semaphore x_sem,Count x_count) x_count.Cvalue+;/等待资源的线程数加1,初始值为0 System.out.print(“Waitn“); if(next_count0)/判断是否有发出s

5、ignal操作的线程 next.v();/若有就释放一个 System.out.print(“释放一个发出signal操作的线程n“); /frame.a1.append(“开放管程n“); else mutex.v();/否则开放管程 System.out.print(“开放管程n“); frame.a1.append(“开放管程n“); x_sem.p();/等待资源的线程阻塞自己,X_sem初始化为0 /System.out.print(“Waitn“); x_count.Cvalue-;/等待资源的线程数减1 ,核心数据结构(2)主要方法,public void Signal(Sema

6、phore x_sem,Count x_count) if(x_count.Cvalue0)/判断是否有等待资源的线程 System.out.print(“Signaln“); next_count+;/发出signal操作的线程数加1 x_sem.v();/释放一个等待资源的线程 next.p();/发出signal操作的线程阻塞自己 /System.out.print(“Signaln“); next_count-;/发出signal操作的线程数减1 ,核心算法流程图,生产者:,核心算法流程图,消费者:,是否有因发出signal而阻塞自己?,功能模块,P线程,C线程,如果缓冲区不满,如果缓冲区不空,生产者类,消费者类,管程类,信号量类,图形化界面,借助图形化界面直观模拟,计划完成情况,在3月初完成程序框架及基本结构和类的整体设计及代码编写。 3月2日3月5日:完成界面程序设计,并成功把界面和程序结合在一起。 3月6日3月8日:完善核心程序,优化数据结构,按照老师的建议用管程实现。 注:基本按照计划进行,完成情况良好,存在的困难或问题,(1)如何把进程调度与生产者与消费者问题结合起来,(2)用管程来实现时,产生死锁问题如何解决,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 幼儿/小学教育 > 小学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号