import Semaforo.*;
class Central_Camion
{
protected static final SemaforoGeneral ch=new SemaforoGeneral(10);//numero de personas por persona
protected static final SemaforoBinario g=new SemaforoBinario(0);
public static void main(String [] args)
{
terminal m=new terminal(ch,g);
Thread subir_persona=new Thread(new subir_persona(m));
Thread salir_camion=new Thread(new salir_camion(m));
subir_persona.start();
salir_camion.start();
}
}
class terminal
{
SemaforoGeneral ch;
SemaforoBinario g;
public terminal(SemaforoGeneral sg, SemaforoBinario sb)
{
this.ch=sg;
this.g=sb;
}
public void persona(int i)
{
ch.WAIT();
System.out.println("Persona "+i+" sube al camion");
if(ch.valor()==0)
g.SIGNAL();
}
public void salir_camion(int i)
{
g.WAIT();
if(g.valor()==0)
{
System.out.println("\nSalio Camion "+i+" con 10 personas\n");
for(int k=1;k<=10;k++)
ch.SIGNAL();
}
}
}
class subir_persona extends Central_Camion implements Runnable{
private terminal m1;
public subir_persona(terminal m){
this.m1=m;
}
public void run() {
for(int i=1;i<=5;i++){
int j=1;
while(j!=11){//cuando hay 10 personas sale el camion
try { Thread.sleep(300); } catch(Exception e) {}
m1.persona(j);
j++;
}
}
}
}
class salir_camion extends Central_Camion implements Runnable{
private terminal m2;
public salir_camion(terminal m){
this.m2=m;
}
public void run(){
for(int i=1;i<=5;i++)//num de camiones que salen
m2.salir_camion(i);
}
}
Ejecucion del Programa:

|