Задача синхронизации "Читатели писатели"

Модератор: Absurd

Ответить
assis2007
Сообщения: 78
Зарегистрирован: 04 ноя 2007, 19:17

20 май 2010, 18:12

Скажите пожалуйста правильно ли она работает и может ли кто нибудь закоментить каждую строчку чтобы полностью разобрался

Код: Выделить всё

import java.util.Random;


class Buffer{
    private int buffer;
    public synchronized int incr(){return ++buffer;}
    public synchronized int read(){return buffer;}
}

class Reader extends Thread{
    private Random random = new Random();
    private String name;
    private Buffer buffer;
    private int reads;
    public Reader(String name, Buffer buffer, int reads){
	this.setPriority(Thread.MAX_PRIORITY);
	this.setName(name);
	this.buffer=buffer;
	this.reads=reads;
    }
    public void run(){
	while(reads-->0){
	    System.out.println("Reader "+this.getName()+": "+buffer.read());
 	    try{
 		Thread.sleep(random.nextInt(100));
 	    }catch(InterruptedException e){}
	}
    }
}

class Writer extends Thread{
    private Random random = new Random();
    private String name;
    private Buffer buffer;
    private int writes;
    public Writer(String name, Buffer buffer, int writes){
	this.setPriority(Thread.MIN_PRIORITY);
	this.setName(name);
	this.buffer=buffer;
	this.writes=writes;
    }
    public void run(){
	while(writes-->0){
	    System.out.println("Writer "+this.getName()+": "+buffer.incr());
 	    try{
 		Thread.sleep(random.nextInt(1000));
 	    }catch(InterruptedException e){}
	}
    }
}


public class RW{

    public static int nicify(String a, int low, int high){
	// intification and range enforcement
	return(Math.min(Math.max(Integer.parseInt(a),low),high));
    }

    public static void main(String[]args){

	int nReaders = 3;
	int nWriters = 4;
	int nAccesses = 2;

	String letters[] = {"A","B","C","D","E","F","G","H","I","J"};

	System.out.println("Starting RW with:\n"+
			   nReaders+" readers,\n"+
			   nWriters+" writers,\n"+
			   nAccesses+" accesses.");

	Buffer buffer = new Buffer();

	for(int i = 0; i < nReaders; i++){
	    new Reader(letters[i],buffer,nAccesses).start();
	}

	for(int i = 0; i < nWriters; i++){
	    new Writer(letters[i],buffer,nAccesses).start();
	}
    }
}

toorgoxiaGoto
Сообщения: 0
Зарегистрирован: 24 окт 2012, 19:02
Откуда: Russia
Контактная информация:

29 окт 2012, 23:44

Я прошёл тест, посмеялся просто край, советую, ппц угар

ccilka xD
Ответить