📄 o.java
字号:
import java.awt.*;
import java.io.*;
import java.lang.*;
import java.util.*;
class PCB
{
int Wmutex;
int Rrun;
int Wrun;
int Rwait;
int Wwait;
public void display(int Rrun,int Rwait,int Wrun,int Wwait)
{
System.out.println(" 正在读文件的读者数目是:"+Rrun);
System.out.println(" 正在等待的读者数目是:"+Rwait);
System.out.println(" 正在运行的写者数目是:"+Wrun);
System.out.println(" 正在等待的写者数目是:"+Wwait);
}
}
class Readerpcb extends PCB
{
public Readerpcb(int wmutex,int rrun,int rwait)
{
Wmutex=wmutex;Rrun=rrun;Rwait=rwait;
}
}
class Writerpcb extends PCB
{
int Rmutex;
public Writerpcb(int rm,int wm,int wr,int ww)
{
Rmutex=rm;Wmutex=wm;Wrun=wr;Wwait=ww;
}
}
class Reader_Exit extends Readerpcb
{
int Rexit;
public Reader_Exit(int wmutex,int rrun,int rwait)
{
super(wmutex,rrun,rwait);
}
}
class Writer_Exit extends Writerpcb
{
public Writer_Exit(int rm,int wm,int wr,int ww)
{
super(rm,wm,wr,ww);
}
}
//////////////////////////////////////////////////////////////////////
public class O
{
public static void main(String args[])
{
int Rm=1,Wm=1,Rr=0,Wr=0,Rw=0,Ww=0,Re=0;
int button1=0,button2=0;
String x1="",x2="";
System.out.println("**********************************************************************");
System.out.println("** 欢迎进入读者写者演示模拟界面! **");
System.out.println("** 作者 wulingyun **");
System.out.println("** 按1选择读者优先,按2选择写者优先 **");
System.out.print("**请选择按钮:");
try
{
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
x1=in.readLine();
button1=Integer.parseInt(x1);
}catch(IOException e){}
while(true)
{
System.out.println("**请选择:1创建读者 2创建写者 3一个运行的读者退出 4运行的写者退出**");
System.out.print("**请选择按扭:");
try
{
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
x2=in.readLine();
button2=Integer.parseInt(x2);
}catch(IOException e){}
if(button1==1)
{
if(button2==1)
{
Readerpcb r=new Readerpcb(Wm,Rr,Rw);
System.out.print("**您已创建一个读者,");
if(Wr!=0)
{
System.out.println("此读者要等待.");
Rw=Rw+1;
r.display(Rr,Rw,Wr,Ww);
}
else
{
System.out.println("此读者开始读文件.");
Wm=Wm-1;Rr=Rr+1;
r.display(Rr,Rw,Wr,Ww);
}
}
else if(button2==2)
{
Writerpcb w=new Writerpcb(Rm,Wm,Wr,Ww);
System.out.print("您已创建一个写者.");
if((Rm-1)<0||(Wm-1)<0||(Rr==0&&Wr==0&&Rw!=0))
{
System.out.println("此写者要等待.");
Ww=Ww+1;
w.display(Rr,Rw,Wr,Ww);
}
else
{
System.out.println("此写者开始写文件.");
Rm=Rm-1;Wm=Wm-1;Wr=Wr+1;
w.display(Rr,Rw,Wr,Ww);
}
}
else if(button2==3)
{
Reader_Exit rexit=new Reader_Exit(Wm,Rr,Rw);
Wm=Wm+1;Rr=Rr-1;
System.out.println("**一个读者已退出.");
if(Rr!=0)
{
rexit.display(Rr,Rw,Wr,Ww);
}
else if(Ww>0)
{
Wr=1;Ww=Ww-1;Rm=Rm-1;Wm=Wm-1;
rexit.display(Rr,Rw,Wr,Ww);
}
}
else if(button2==4)
{
Writer_Exit wexit=new Writer_Exit(Rm,Wm,Wr,Ww);
Wr=0;Rm=Rm+1;Wm=Wm+1;
System.out.println("一个写者已退出.");
if(Rw!=0)
{
Rw=Rw-1;Rr=Rr+1;
wexit.display(Rr,Rw,Wr,Ww);
}
else if(Ww!=0)
{
Ww=Ww-1;Wr=Wr+1;
wexit.display(Rr,Rw,Wr,Ww);
}
}
}
else if(button1==2)
{
if(button2==1)
{
Readerpcb r=new Readerpcb(Wm,Rr,Rw);
System.out.print("**您已创建一个读者,");
if((Wm-1)<0||((!((Wm-1)<0))&&Ww!=0))
{
System.out.println("此读者要等待.");
Rw=Rw+1;
r.display(Rr,Rw,Wr,Ww);
}
else
{
System.out.println("此读者开始读文件.");
Wm=Wm-1;Rr=Rr+1;
r.display(Rr,Rw,Wr,Ww);
}
}
else if(button2==2)
{
Writerpcb w=new Writerpcb(Rm,Wm,Wr,Ww);
System.out.print("您已创建一个写者.");
if((Rm-1)<0||(Wm-1)<0)
{
System.out.println("此写者要等待.");
Ww=Ww+1;
w.display(Rr,Rw,Wr,Ww);
}
else
{
System.out.println("此写者开始写文件.");
Rm=Rm-1;Wm=Wm-1;Wr=1;
w.display(Rr,Rw,Wr,Ww);
}
}
else if(button2==3)
{
Reader_Exit rexit=new Reader_Exit(Wm,Rr,Rw);
Wm=Wm+1;Rr=Rr-1;
System.out.println("**一个读者已退出.");
if(Rr!=0)
{
rexit.display(Rr,Rw,Wr,Ww);
}
else if(Ww>0)
{
Wr=1;Ww=Ww-1;Rm=Rm-1;Wm=Wm-1;
rexit.display(Rr,Rw,Wr,Ww);
}
}
else if(button2==4)
{
Writer_Exit wexit=new Writer_Exit(Rm,Wm,Wr,Ww);
Wr=0;Rm=Rm+1;Wm=Wm+1;
System.out.println("一个写者已退出.");
if(Ww==0&&Rw>0)
{
Rw=Rw-1;Rr=Rr+1;Wm=Wm-1;
wexit.display(Rr,Rw,Wr,Ww);
}
else
{
Ww=Ww-1;Wr=1;Rm=Rm-1;Wm=Wm-1;
wexit.display(Rr,Rw,Wr,Ww);
}
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -