/*semaforos*/
public class SemParking {
public static void main (String args[]) {
for (int i=0;i<10;i++)
new Thread (new Coche (i)).start();
new Thread (new Maquina()).start();
new Thread (new Barrera()).start();
}
}
/**/
public class Coche extends Comun implements Runnable {
int i;
public Coche (int _i) {
i=_i;
}
public void run () {
try {Thread.sleep (1000);} catch (Exception e) {}
System.out.println ("Llega el coche "+i);
noHayCoche.WAIT();
barreraBajada.WAIT();
boton.SIGNAL();
barreraAbierta.WAIT();
System.out.println ("Coche: "+ i +" pasando");
cocheHaPasado.SIGNAL();
noHayCoche.SIGNAL();
try {Thread.sleep (1000);} catch (Exception e) {}
numCoches.SIGNAL();
System.out.println ("Coche: "+ i +" saliendo");
}
}
/**/
public class Barrera extends Comun implements Runnable {
public void run () {
while (true) {
numCoches.WAIT();
ticketExpendido.WAIT();
barreraAbierta.SIGNAL();
System.out.println ("Levantando barrera");
cocheHaPasado.WAIT();
System.out.println ("Bajando barrera");
barreraBajada.SIGNAL();
}
}
}
/**/
import Semaforo.*;
public class Comun {
protected static SemaforoBinario boton = new SemaforoBinario (0);
protected static SemaforoBinario ticketExpendido = new SemaforoBinario (0);
protected static SemaforoBinario barreraAbierta = new SemaforoBinario (0);
protected static SemaforoBinario cocheHaPasado = new SemaforoBinario (0);
protected static SemaforoBinario noHayCoche = new SemaforoBinario (1);
protected static SemaforoBinario barreraBajada = new SemaforoBinario (1);
protected static SemaforoGeneral numCoches = new SemaforoGeneral (5);
}
/**/
public class Maquina extends Comun implements Runnable {
public void run () {
while (true) {
boton.WAIT();
System.out.println ("Expendiendo ticket");
ticketExpendido.SIGNAL();
}
}
}
|