进程同步读者写者问题

进程同步读者写者问题

ID:42072925

大小:90.00 KB

页数:6页

时间:2019-09-07

进程同步读者写者问题_第1页
进程同步读者写者问题_第2页
进程同步读者写者问题_第3页
进程同步读者写者问题_第4页
进程同步读者写者问题_第5页
资源描述:

《进程同步读者写者问题》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、读者写者问题1、实验目的使用高级语言编写程序,实现进程同步。即,读者写者之间对buffer的互斥使用,读者读者之间对count的互斥使用。2、实验内容1)、开启4个thread线程,即分别代表1个写者,3个读者。2)、设置了wmutex,rmutex两个信号量,以及count来统计读者的数量,content来保存写者写入的东西。3、实验步骤1)、直接执行程序即可。4>实验小结该程序使用JAVA语言写的,没有界面,在算法上一开始由于逻辑上的错误,结果程序运行之后就直接死锁了,后来在和同学的交流讨论下解决了这个问题。该题目没有界面,仍可进一步优化。程序源代码

2、importjavax.swing.JOptionPane;publicclassReaderWriter{publicstaticvoidmain(String[]args){Bufferbuffer=newBuffer();newThread(newWriter(bulfer)).start();newThread(newReader(buffer)).start();newThread(newReader(buffer)).start();newTliread(newReader(buffer)).start();}}classBuffer//Bu

3、ffer相当于公共数据区{intwmutex,rmutex;//buffer的互斥信号量,表示目前buffer为空,rmutex:readcount互斥信号量intcontent;//intcount;//统计读者人数publicBuffer()wmutex=l;//l:可用,0:不可用rmutex二1;content=0;//用于存放内容count=0;}publicsynchronizedvoidread()//attentiontothis:不用传递参数{if(rmutex==O)//rmutex锁上了{try{this.wait();〃阻塞当前进

4、程)catch(InterruptedExceptione){e.printStackTrace();)}else//§H'Jrmutex为开锁{if(count==0)//H前处于写态,所以,阻塞进程{waitW();//}mutex=0;//申请资源n+contecount++;System.out.println(,'reader,'+Tliread.currentThread().getName()+"readnt);〃读完就走就释放资源count—;if(count==0){notifyW();}notify();i*mutex=1;〃释放co

5、unt锁)}publicsynchronizedvoidwrite(){if(wmutex==O&&rmutex==O)//buffer>和count都上锁,正在读{trycatch(InterruptedExceptione){e.printStackTrace();}}else{wmutex=l;//如果没有发生if下面的条件,则申请资源并且上锁Stringstr=JOptionPane.showInputDialog("请输出要写的数(IXI<30000):”);content=lnteger.pai-selnt(str);System.out.p

6、rintln("writer'1+"写进了"+content);wmutex=O;//Jp锁notifyO;})publicsynchronizedvoidwaitW(){if(wmutex==0)//正在写{try{this.wait();}catch(InterruptedExceptione){e.printStackTrace();}}else{wmutex=0;//申请资源,即上锁}}publicsynchronizedvoidnotifyW()notify();wmutex=l;//释放buffer锁classReaderimplements

7、Runnable//读进程{Bufferbuffer;publicReader(Bufferbuffer)//此处实现两类人,用一个缓冲池{this.buffer=buffer;}@Overridepublicvoidrun(){//TODOAuto-generatedmethodstubwhile(true)(buffer.rendO;try{Thiead.sleep(1(X));}catch(InterruptedExceptione){e.printStackTrace();classWriterimplementsRunnable//写进程{Bu

8、fferbuffer;publicWriter(Bufferbuffer)//此

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

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

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