Você está na página 1de 2

Cdigo java barbero dormilon // Suposiciones: // - El barbero corta el pelo fuera del objeto protegido // Si lo cortara dentro, seria

menos realista la simulacion // del tiempo en que se tarda en hacer esta operacion. Si // no se hace este retardo, es decir si el tiempo de corte // de pelo fuera practicamente 0, no habria casi nunca // procesos esperando. // - Se simula la silla del barbero y las sillas de la sala // de espera.

public class barberia { private int nSillasEspera; private int nSillasEsperaOcupadas = 0; private boolean sillaBarberoOcupada = false; private boolean finCorte = false; private boolean barberoDormido = false; //JAVA: slo puede haber N_Sillas_Espera_max hebras //esperando dentro del monitor a que le toque. public barberia(int nSillasEspera) { this. NSillasEspera = nSillasEspera; } public synchronized boolean entrar(int clienteId) throws InterruptedException { if (nSillasEsperaOcupadas == nSillasEspera) { // Si no hay sillas libres, me voy sin cortar el pelo System.out.println ("---- El cliente " + clienteId + " se va sin cortarse el pelo"); return false; } else { //Me quedo esperando si la silla del barbero est //ocupada nSillasEsperaOcupadas ++; System.out.println ("---- El cliente " + clienteId + " se sienta en la silla de espera"); while (sillaBarberoOcupada) {wait();} //Desocupo la silla de espera nSillasEsperaOcupadas --; //Me siento en la silla del barbero sillaBarberoOcupada = true; finCorte = false; //Si el barbero est dormido le despierto if (barberoDormido) { System.out.println ("---- El cliente " + clienteId + " despierta al barbero"); notifyAll();} //Espero a que me corte el pelo System.out.println ("---- El cliente " + clienteId + " en la silla de barbero"); while (! FinCorte) {wait();} sillaBarberoOcupada = false; //Que pase el siguiente notifyAll(); System.out.println ("---- El cliente " + clienteId + " se va con el pelo cortado"); return true; } } public synchronized void esperarCliente() throws InterruptedException { //El barbero espera a que llegue un cliente //Se supone que le corta el pelo fuera del //monitor barberoDormido = true; while(! SillaBarberoOcupada) { System.out.println("++++ Barbero

esperando cliente"); wait(); } barberoDormido = false; System.out.println("++++ Barbero cortando el pelo"); } public synchronized void acabarCorte(){ finCorte = true; System.out.println("++++ Barbero termina de cortar el pelo"); notifyAll(); } }

Você também pode gostar