生产者消费者问题操作系统课程设计思路

生产者消费者问题操作系统课程设计思路

ID:38389983

大小:1.88 MB

页数:17页

时间:2019-06-11

生产者消费者问题操作系统课程设计思路_第1页
生产者消费者问题操作系统课程设计思路_第2页
生产者消费者问题操作系统课程设计思路_第3页
生产者消费者问题操作系统课程设计思路_第4页
生产者消费者问题操作系统课程设计思路_第5页
资源描述:

《生产者消费者问题操作系统课程设计思路》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、目的及方法技术路线核心技术测试情况及分析4123OS课程设计——总结汇报目录一工作总结存在问题改进及讨论系统演示8567目录二目的及方法本课程设计通过模拟计算机操作系统中经典的“生产者—消费者问题”,巩固在操作系统原理课上所学的知识,加深对操作系统中进程同步和互斥、临界区管理等问题认识和理解,同时又了解了软件设计的流程、方法以及思想,提高分析设计以及编程的能力。技术路线生产者—消费者多生产者多消费者同步互斥并发可视化P()/V()多线程JavaSwing和awtThreadJava中的wait()和notify(

2、)管程实现核心技术(1)模拟P、V操作:publicclassSemaphore{//信号量(即PV操作的类)privateintValue;//信号量值publicSemaphore(intsemValue){this.Value=semValue;}PS:用Java中的wait()和notify()模拟操作系统的P/V操作publicsynchronizedvoidp(Strings){//P操作(即申请资源)Value--;if(Value<0){//没有可用资源try{System.out.print("

3、"+s+"进入阻塞队列");frame.a1.append(""+s+"进入阻塞队列");this.wait();//因资源不足而阻塞自己//System.out.print(""+this.toString()+"iswaitting");//**}catch(InterruptedExceptione){}}}类Semaphore的定义和重要方法方法模拟操作系统的P操作publicsynchronizedvoidv(Stringss){//V操作Value++;if(Value<=0){//Sys

4、tem.out.print(""+ss+"唤醒");frame.a1.append(""+ss+"");frame.a1.append("唤醒一个等待资源的线程");this.notify();//释放一个等待资源的线程//System.out.print(""+this.toString()+"iswakingup");//**}}}模拟操作系统的V操作核心技术(2)管程的实现:管程类InterfaceModule类的属性:privateSemaphoremutex;//进程调用管程之前所使用的互斥

5、信号量privateSemaphorenext;//发出signal操作的线程挂起自己的信号量intnext_count;//在next上等待的线程数管程类InterfaceModule类的重要方法:(1)publicvoidenter()//进入管程(2)publicvoidleave()//离开管程(3)publicvoidWait(Semaphorex_sem,Countx_count)//wait函数(4)publicvoidSignal(Semaphorex_sem,Countx_count)//Sig

6、nal函数核心技术(2)续——核心函数publicvoidenter(Strings){mutex.p(s+"因无法进入管程而");//互斥的进入管程frame.a1.append(""+s+"已经进入管程");//System.out.print("进入管程");}PS:mutex.p要使用到前面模拟的P/V操作函数publicvoidleave(Strings1){frame.a1.append(s1+"当前正在执行管程的leave操作");if(next_count>0)//判断有否发出si

7、gnal操作的线程{next.v(s1+"释放一个因发出signal操作而阻塞自己的线程");//若有就释放一个//frame.a1.append("释放一个因发出signal操作而阻塞自己的线程");}else{mutex.v(s1+"离开管程"+"开放管程");//否则开放管程//frame.a1.append("线程即将要离开管程,在离开之前开放管程");}//System.out.print("离开管程");}核心技术(2)续——核心函数publicvoidWait(Semapho

8、rex_sem,Countx_count,Strings1){x_count.Cvalue++;//等待资源的线程数加1,初始值为0System.out.print("Wait");frame.a1.append(s1+"执行Wait操作因资源不可用而该线程即将阻塞自己!!(缓冲区已满或者已为空)在阻塞自己之前,先判断是否有发出signal操作的线程。若有,则释放

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。