操作系统课程设计-读者-写者问题_第1页
操作系统课程设计-读者-写者问题_第2页
操作系统课程设计-读者-写者问题_第3页
操作系统课程设计-读者-写者问题_第4页
操作系统课程设计-读者-写者问题_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计说明书设计题目:操作系统课程设计—读者--写者问题目录实验题目····························2实验目的····························2设计思想····························2实验流程图·························2实验代码····························3运行结果····························6心得体会····························6一.实验题目2.读者--写者问题二.实验目的1.熟悉临界资源、信号量及PV操作的定义与物理意义;2.了解进程通信的方法;3.掌握进程互斥与进程同步的相关知识;4.掌握用信号量机制解决进程之间的同步与互斥问题;5.实现读者—写者问题,深刻理解进程同步问题。三.设计思想采用读者优先的方法,无读者和写者时,读者或者写者都可读或者写;有读者时,读者可以读,写者不可以写;有写者时,读者不可以读,写者也不可以写。四.实验流程图开始开始写者申请是否有人等待是开始写,rc_mutex--否写结束继续写否rc_mutex++是结束写者:读者申请读者申请开始等待是rn++re_mutex=0?否rn=1?writer--是开始读否读结束继续读rn--rn=0?Write++,唤醒写者结束否是是读者:五.实验代码importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassreader_writerextendsJFrameimplementsActionListener{ publicJLabeljl1,jl2,jl3; publicJTextFieldjtf1,jtf2,jtf3; publicJButtonjb1,jb2,jb3,jb4; intrn=0;//读者的数量 intwn=0;//写者的数量 intrc_mutex=1; intwrite=1; publicreader_writer(){ JPaneljp=newJPanel(); jp.setLayout(newGridLayout(5,2));//网格布局 jl1=newJLabel("类型:"); jp.add(jl1); jtf1=newJTextField(); jtf1.setEditable(false); jp.add(jtf1); jl2=newJLabel("数量:"); jp.add(jl2); jtf2=newJTextField("0"); jtf2.setEditable(false); jp.add(jtf2); jl3=newJLabel("是否成功:"); jp.add(jl3); jtf3=newJTextField(""); jtf3.setEditable(false); jp.add(jtf3); jb1=newJButton("读者进"); jb1.addActionListener(this); jp.add(jb1); jb2=newJButton("读者出"); jb2.addActionListener(this); jp.add(jb2); jb3=newJButton("写者进"); jb3.addActionListener(this); jp.add(jb3); jb4=newJButton("写者出"); jb4.addActionListener(this); jp.add(jb4); this.add(jp); this.setVisible(true); this.setBounds(100,100,200,200);//位置和大小 this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); } publicvoidactionPerformed(ActionEvente){ if(e.getSource()==jb1){ rn=Integer.parseInt(jtf2.getText()); if(rc_mutex==0){//被写者占用 jtf3.setText("否"); }else{ rn++;//读者数量+1 if(rn==1){//是第一个读者 write--;//写者无法进入 } jtf3.setText("是"); jtf1.setText("读者"); jtf2.setText(toString().valueOf(rn)); } } if(e.getSource()==jb2){ rn=Integer.parseInt(jtf2.getText()); if(rc_mutex==0||rn==0){//被写者占用或者读者数量为0 jtf3.setText("否"); }else{ rn--;//读者数量-1 if(rn==0){//最后一个读者 write++;//写者可以进入 jtf1.setText(""); } jtf3.setText("是"); jtf2.setText(toString().valueOf(rn)); } } if(e.getSource()==jb3){ wn=Integer.parseInt(jtf2.getText()); if(wn>0){//已有人 jtf3.setText("否"); }else{ rc_mutex--;//占用 jtf3.setText("是"); jtf1.setText("写者"); jtf2.setText("1"); } } if(e.getSource()==jb4){ wn=Integer.parseInt(jtf2.getText()); if(wn==0||write==0){//写者数量为0 jtf3.setText("否"); }else{ jtf3.setText("是"); jtf1.setText(""); jtf2.setText("0"); rc_mutex++;//释放 } } } publicstaticvoidmain(String[]args){ reader_writerr_w=newreader_writer(); }}六.运行结

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论