
/* Internet Programming Assignment -- Implementing solution of Reader-Writer problem in java -- By: puru(02bce070)*/

class reader extends Thread
{
	main_class y;
	public void run()
	{
	y.rno++;
	System.out.println("Enter reader no:" +y.rno);
	System.out.println("Value is:" +y.shared_variable);
	while(true)
	 {
		read();
	
	 }
	}
	public void read()
	{
		y.rno++;
		if(y.mutex==0||y.mutex==1)
		{
			System.out.println("Enter reader no:" +y.rno);
			y.mutex=1;
			System.out.println("Value is:" +y.shared_variable);
			System.out.println("Left reader no:"+y.rno);
			y.mutex=0;
		}
		else
		return;
	
	}

}


class writer extends Thread
{
	main_class y;
	public void run()
	{
		System.out.println("Enter Writer");
		while(true)
		{
			write();
			
		}
		
	}
	
	public void write()
	{
		if(y.mutex==0)
		{
			
			y.mutex=-1;
			System.out.println("Enter Writer");
			++y.shared_variable;
			System.out.println("Value modified to:" +y.shared_variable);
			System.out.println("Leave Writer");
			y.mutex=0;
		}
		else
		return;
	}

}

class main_class
{
static int mutex=0; /*Semaphore* 0 for neutral,2 for writing and 1 for reading*/
static int shared_variable=0;
static int rno=0;  /*Number of readers*/

public static void main(String args[])
	{
		reader read=new reader();
		writer write=new writer();
		read.start();
		write.start();
		System.out.println("Internet Programming Assignment -- Implementing solution of Reader-Writer problem in java -- By: puru(02bce070)");
		System.out.println("Solution to Readers and Writers problem");

	}
}
