fla_gab
(usa Ubuntu)
Enviado em 24/04/2008 - 09:54h
Bom dia pessoal, fiz o programa do barbeiro dorminhoco em java, porém ele não rodando sempre, como deveria, toda vez que chega a um determinado ponto ele simplesmente pára de rodar, alguém poderia me dizer o que pode ser? aqui está o código:
====> Main:
package barbeirodorminhoco;
public class Main
{
static final int MAXCLIENTES = 5;
static semaforo clientes = new semaforo(0);
static semaforo barbeiros = new semaforo(0);
static semaforo mutex = new semaforo(1);
static int waiting = 0,cont;
static cliente cli[]=new cliente [10];
public Main()
{
}
public static void main(String[] args)
{
barbeiro b1 = new barbeiro(1);
b1.start();
for(cont=0;cont<10;cont++)
cli[cont]=new cliente(cont);
for(cont=0;cont<10;cont++)
cli[cont].start();
}
}
===>>> Barbeiro
package barbeirodorminhoco;
public class barbeiro extends Thread
{
private int id;
public barbeiro(int id)
{
this.id = id;
}
private void cortarCabelo()
{
System.out.println("Barbeiro cortando o cabelo");
try
{
sleep((int)(Math.random() * 1000));
}
catch(Exception e)
{
}
System.out.println("Barbeiro terminando");
}
public void run()
{
System.out.println(" Barbeiro chegou a barbearia");
while (true)
{
Main.clientes.P();
Main.mutex.P();
Main.waiting=Main.waiting+1;
Main.barbeiros.V();
Main.mutex.V();
cortarCabelo();
}
}
}
====>Cliente
package barbeirodorminhoco;
public class cliente extends Thread
{
private int id;
public cliente (int id)
{
this.id = id;
}
private void cortarCabelo()
{
System.out.println("Cliente " + this.id + " cortando o cabelo");
}
public void run()
{
System.out.println("Cliente "+ this.id +" chegou a barbearia");
Main.mutex.P();
if ( Main.waiting < Main.MAXCLIENTES )
{
Main.waiting++;
Main.clientes.V();
Main.mutex.V();
Main.barbeiros.P();
cortarCabelo();
}
else
{
System.out.println("Barbearia Cheia! Cliente " + this.id + " indo embora");
Main.mutex.V();
}
}
}
====>Semaforo
package barbeirodorminhoco;
public class semaforo
{
private int value;
public semaforo(int v)
{
value=v;
}
public synchronized void P()
{
while(value<=0)
{
try
{
wait();
}
catch (Exception e)
{
}
}
value--;
}
public synchronized void V()
{
++value;
notify(); //acorda proccesso
}
}
flw