Programacion Concurrente
  Estacionamiento semaforos
 

/*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();
  }
 }

 
   
 
Este sitio web fue creado de forma gratuita con PaginaWebGratis.es. ¿Quieres también tu sitio web propio?
Registrarse gratis