




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验报告三实验名称:・、调实验证“有限缓冲”经典同步问题二、运用Java同步解决“哲学家进餐”问题日期:2023-11-5班级:13级计科学号:姓名:一、实验目的.了解信号量的使用.掌握对的使用同步机制的方法.实现生产者消费者进程的互斥与同步.实现java同步解决“哲学家进餐〃问题二、实验内容.调实验证“有限缓冲”经典同步问题.运用Java同步解决“哲学家进餐”问题三、项目规定与分析.“有限缓冲”经典同步问题(1)问题描述有一群生产者进程在生产产品,此产品提供应消费者去消费。为使生产者和消费者进程能并发执行,在它们之间设立:一个具有n个缓冲池,生产者进程可将它所生产的产品放入一个缓冲池中,消费者进程可从一个缓冲区取得一个产品消费。(2)问题分析设两个同步信号量:一个说明空缓冲区的数目,用empty表达,初值为有界缓冲区的大小N,另一个说明已用缓冲区的数目,用full表达,初值为0。由于在执行生产活动和消费活动中要对有界缓冲区进行操作。有界缓冲区是个临界资源,必须互斥使用,所以此外还需要设立一个互斥信号量mutex,其初值为1。。while(true)«t();try{o。sLeep(1000);}catch(InterruptedExceptione){}。sthink();。tny0{osLeep(1000);a}catch(InterruptedExceptione){})}}publicclassWaitNotiExample{pub1icstaticvoidmain(String[]args){»finalChopStick[]chopsticks=newChopStick[4];®ofinalPhilosopher[]philos=newPhilosopher[4];for(inti=0;iV4;i++)chopsticks[i]=newChopStick();}for(inti=0;i<4;i++)。phi1os[i]=newPhi1osopher(chopsticks[i],chopsticks[(i+l)%4],i);}for(inti=0;i<4;i++){,philos[i].start();}(2)运营结果:terminated>WaitNotiExample[JavaApplication]C:\ProgramFiles\Java\jre1.8.051\bin\javaw.exe(2015年11哲学家等待另一根筷子一哲学家2在用餐哲学家等待另一根筷子哲学家等待另一根筷子哲学家1在用餐哲学家等待另一根筷子哲学家2在思考哲学家等待另一根筷子哲学家4在用餐哲学家等待另一根筷子哲学家1在思考哲学家等待另一根筷子哲学家3在用餐哲学家等待另一根筷子哲学家4在思考哲学家等待另一根筷子二、所遇问题与解决方法1.问题最初设想当筷子可用是,先分派左边的筷子,等待一会额再分派右边的筷子,由于这个算法过程中,会出现左边的筷子一直被占用着得不到释放,就有也许出现死锁的情况,该算法不可行。.解决仅当一个哲学家左右的筷子都可用时,才允许他拿起筷子。这样要么只有一次占用两只筷子在吃面,然后释放所有的资源;要么不占用资源。该算法可行。三、实验总结.“有限缓冲〃经典同步问题(1)本次实验是关于生产者与消费者之间互斥和同步的问题。问题的是指是P、V操作,实验设一个共享缓冲区,生产者和消费者互斥的使用,当一个线程使用缓冲区的时候,另一个让其等待直到前一个线程释放缓冲区为止。(2)实验中包含的知识点很多,涉及临界区资源共享问题、信号量定义、PV操作流程、进程间的通信方式(消息传递和共享内存)、进程同步和互斥、信号量机制解决进程之间的同步与互斥问题等等。(3)通过本实验设计,我们对操作系统的P、V进一步的结识,进一步的了解P、V操作的实质和其重要性。课本的理论知识进一步阐述了现实中的实际问题。.哲学家进餐问题(1)程序分为四大模块,一步步解决了哲学家状态及状态改变的问题,筷子的“闲”、“用”问题;实现了哲学家等待、吃饭、思考三个过程的转换循环,并且避免了死锁问题;让临间资源得到了充足的运用。(2)这次实验让我学会分模块解决问题,如何运用互斥锁对临间资源进行管理;此外自己在编程上以及一些函数的结识上存在较大的问题,以后应当多多实践,提高自己的反映速度,加速逻辑思维能力。2.“哲学家进餐”问题(1)问题描述假如所有的哲学家都同时拿起左侧筷子,看到右侧筷子不可用,乂都放下左侧筷子,等一会儿,又同时拿起左侧筷子,如此这般,永远反复。对于这种情况,即所有的程序都在无限制地运营,但是都无法得到任何进展,即出现饿死,所有的哲学家都吃不上饭。规定在拿起左侧的筷子后,先检查右面的筷子是否可用。假如不可用,则放下左侧的筷子,等一段时间后再反复整个过程。(2)问题分析当出现以下情形,在某一瞬间,所有的哲学家都同时启用这个算法,拿起左侧的筷子,而看到右侧筷子都不可用,又都放下左侧筷子,等一会儿,又同时拿起左侧筷子……如此永远反复下去。对于这种情况,所有的程序都在运营,但却都无法取得进展,即出现饿死,所有的哲学家都吃不上饭。解决死锁问题:为了避免死锁,把哲学家分为三种状态:思考,饥饿(等待),进食,并且一次拿起两只筷子,否则不拿。四、具体实现1.“有限缓冲”经典同步问题(1)具体实现代码〃缓冲区实现publicclassBoundeBufferimplementsBuffer(privatestaticfinalintBUFFER_SIZE=5;private0bject[]buffer;privateintin,out;privateSemaphoremutex;。privateSemaphoreempty;privateSemaphorefull;publieBoundeBuffer(){。。in=0;out=0;。buffer=newObject[BL7FFER_S/ZE];。mutex=newSemaphore(l);,empty=newSemaphore(BUFFER_SIZE);。ful1=newSemaphore(0);。}publievoidinsert(Objectitcm)°(try(。empty.acquire();。mutex.acquire();。buffer[in]=item;in=(in+l)%BUFFER_SIZE',omutex.release();fu11.release();}catch(InterruptedExceptione){e.printStackTrace();}publicObjectremove()。。try{o°ofull・acquire();。。mutex.acquire():o}catch(InterruptedExceptione)。(oooe.printstackTrace();}»Objectitem=buffer[out]:oout=(out+l)XBUFFEP_SIZE\。mutex.release();o»empty.re1ease();0。。returnitem;。}〃生产者实现publicc1assProducerimplementsRunnab1{oprivateBufferbuffer;opublicProducer(Bufferbuffer),。this.buffer=buffer;oopub1icvoidrun()Datemessage;d0owhi1e(true){sSleepUtilities.nap();。message=newDate();System.out.printin("生产者产生了"+message);。buffer.insert(message);0}。})〃消费者实现publicclassConsumerimplementsRunnab1e{privateBufferbuffer;pub1icConsumer(Bufferbuffer){®this.buffer=buffer;publicvoidrun()(。。Datemessage;。owhile(true)(,»SIeeputi1ities.naP();message=(Date)buffer.remove();d。System.out.println("消费者者消费了"+message);//工厂测试类publicc1assFactory{publiestaticvoidmain(String[]args){Bufferbuffer=newBoundeBuffer。;Threadproducer=newThread(newProducer(buffer));»。Threadconsumer=newThread(newConsumer(buffer));。。producer.start();consumer,start();(2)运营结果:<terminated>Factory(1)[JavaApplication]C:\ProgramFiles\Java\jre1.8.0_51\bin\javaw.exe।生产者产生jSunNov2218:37:24CST2015消费者者消费了SunNov2218:37:24CST2015生产者产生了SunNov2218:37:24CST2015生产者产生了SunNov2218:37:27CST2015消费者者消费了SunNov2218:37:24CST2015消费者者消费1SunNov2218:37:27CST2015生产者产生了SunNov2218:37:29CST2015生产者产生了SunNov2218:37:30CST2015生产者产生了SunNov2218:37:32CST2015生产者产生了SunNov2218:37:32CST2015生产者产生了SunNov2218:37:32CST2015生产者产生了SunNov2218:37:32CST2015消费者者消费了SunNov2218:37:29CST2015生产者产生了SunNov2218:37:34CST2015消费者者消费了SunNov2218:37:30CST2015生产者产生了SunNov2218:37:34CST2015消费者者消费了SunNov2218:37:32CST2015消费者者消费亍SunNov2218:37:32CST2015生产者产生了SunNov2218:37:37CST2015消费者者消费了SunNov2218:37:32CST2015生产者产生了SunNov2218:37:39CST2015牛产者产牛了SunNov2218:37:40CST20152.哲学家进餐问题(1)具体实现代码classChopStickboo1eanavailable;ChopStick(){®available=true:pub1icsynchronizedvoidtakeup(){while(!availab1e)o(。try。。。System.out.println("哲学家等待另一根筷子“);。,wait();}catch(InterruptedExceptione)°{}0)。available=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农业渔船管理办法
- 农机科管理办法
- 农村坼迁管理办法
- 农村狗狗管理办法
- 农田基本管理办法
- 农行基建管理办法
- 冬季甜瓜管理办法
- 出口退管理办法
- 出库印章管理办法
- 函件发放管理办法
- 2025数据要素流通指数:理论框架与行业实践探索白皮书
- 2025辽宁阜新市教育系统招聘教师94人笔试备考试题及答案解析
- 2025江苏镇江句容市郭庄镇选拔村级后备人才招聘12人笔试模拟试题及答案解析
- 幼儿飞行知识课件
- 2025届江苏省镇江一中高一物理第二学期期末学业质量监测试题含解析
- 外墙外保温工程技术培训
- 崇川区人才公寓管理办法
- 2025年招西宁市公安局警务辅助人员招聘考试笔试试题(含答案)
- DB42T 1227-2016 全轻混凝土建筑地面保温工程技术规程
- 矿山企业节水管理制度
- 诊所消防制度管理制度
评论
0/150
提交评论