《操作系统课程设计--读者--写者问题.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计--读者--写者问题.docx(8页珍藏版)》请在第一文库网上搜索。
1、课程设计说明书设计题目:操作系统课程设计一读者写者问题目录一实验题目2二 .实验目的2三 .设计思想2四 .实验流程图2五 .实验代码3六运行结果6七.心得体会6一.实验题目2.读者-写者问题二.实验目的1 .熟悉临界资源、信号量及PV操作的定义与物理意义;2 .了解进程通信的方法;3 .掌握进程互斥与进程同步的相关知识;4 .掌握用信号量机制解决进程之间的同步与互斥问题;5 .实现读者写者问题,深刻理解进程同步问题。三.设计思想采用读者优先的方法,无读者和写者时,读者或者写者都可读或者写;有读者时,读者可以读,写者不可以写;有写者时,读者不可以读,写者也不可以写。四.实验流程图写者:读者:开
2、始五.实验代码importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;pub1icc1assreader_writerextendsJFrameimp1ementsAction1istenerpub1icJ1abe1j11,j12J13;pub1icJTextFie1djtf1,jtf2Jtf3;pub1icJButtonjb1,jb2,jb3,jb4;intm=O;/读者的数量intwn=0写者的数量intrc_mutex=1;intwrite=1;pub1icreader-writer()JPane1jp=newJPane1(
3、);jp.set1ayout(newGrid1ayout(5,2)J网格布局j11=newJ1abe1(“类型:,,);j.add(j11);jtf1=newJTextFie1d();jtfI.setEditab1e(fa1se);jp.add(jtf1);j12=newJ1abe1(数量:,);jp.add(j12);jtf2=newJTextFie1d(0);jtf2.setEditab1e(fa1se);jp.add(jtf2);j13=newJ1abe1C是否成功:);jp.add(j13);jtf3=newJTextFie1d();jtf3.setEditab1e(fa1se);jp
4、.add(jtf3);jb1二newJButton(读者进,);jb1.addAction1istener(this);jp.add(jb1);jb2=newJButton(i);jb2.addAction1istener(this);jp.add(jb2);jb3=newJButton(写者进);jb3.addAction1istener(this);jp.add(jb3);jb4=newJButton(写者出);jb4.addAction1istener(this);jp.add(jb4);this.add(jp);this.setVisib1e(true);this.setBounds(
5、100,100,200,200);/位置和大小this.setDefau1tC1oseOperation(JFrame.DISPOSE_ON_C1OSE);)pub1icvoidactionPerformed(ActionEvente)if(e.getSource()=jb1)m=Integer.parseInt(jtf2.getText();if(rc_mutex=0)/被写者占用jtf3.setText(“否);e1sem+;/读者数量+1if(m=1)/是第一个读者write-;/写者无法进入jtf3.setText(是);jtf1setIbxtC读者”);jtf2.setText(to
6、String().va1ueOf(m);)if(e.getSource()=jb2)m=Integer.parseInt(jtf2.getText();if(rc_mutex=01m=0)/被写者占用或者读者数量为0jtf3.setText(否);e1sem-;/读者数量-1if(m=0)/最后一个读者write+;/写者可以进入jtf1.setText();)jtf3.set1ext(,);jtf2.setText(toString().va1ueOf(m);)if(e.getSource()=jb3)wn=Integer.parseInt(jtf2.getText();if(wn0)/已有
7、人jtf3.setText(否);e1serc_mutex;/占用jtf3.setText(是)jtf1.setText(写者”);jtf2.setText(,);)if(e.getSource()=jb4)wn=Integer.parseInt(jtf2.getText();if(wn=0Hwrite=0)/写者数量为0jtf3.setText(“否);e1sejtf3.set1ext(,);jtf1.setText(,r);jtf2.setText(0);rc_mutex+;/释放)pub1icstaticvoidmain(Stringargs)reader_writerr_w=newreader_writer();六.运行结果-_Qh卜曾kgs:读者O数里:1卜否成功:是否成功:否读者进读者出读者进读者出写者进写者出写者进写者出_QH卜型写者k型:读者效里:1救里:3卜否成功:是是否成功:是读者进读者出读者避读者出写者进写者出写者进写者出七.心得体会通过这几天的上机实验,经过自己的不懈努力,终于完成了任务,对于读者一写者问题,其实大致要求基本上每个人都懂,读者什么时候可以读,什么时候不可以读,写者什么时候可以写,什么时候不可以写,这些并不难,但是到写程序的时候,一定要设计好信号量才可以保证运行不会出错,对于进程的同步和互斥让我有了更深刻的理解。