《利用管程 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)用管程来实现时,产生死锁问题如何解决,