⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 o.java

📁 用Java编写的读者写者问题的模拟程序
💻 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 + -