资源预览内容
第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
第9页 / 共12页
第10页 / 共12页
亲,该文档总共12页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
操作系统课程设计算法汇报,核心数据结构(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(); /因资源不足而阻塞自己 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 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“); ,(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)/判断是否有发出signal操作的线程 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(Semaphore 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)用管程来实现时,产生死锁问题如何解决,
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号