Salve a tutti, volevo chiedervi una cosa riguardante la classe Semaphore Java.
Nel fare degli esercizi sui Semaphore in Java mi sono imbattuto in uno che chiedeva di utilizzare la classe Semaphore per gestire una coda di veicoli su un ponte.
Il ponte può "contenere" al massimo 10 veicoli, quelli in esubero aspettano al di fuori del ponte in una coda FIFO.
Io ho, ingenuamente, pensato che la classe Semaphore gestisse in automatico la coda di Thread in modo FIFO, però ho notato che non è così.
Ho provato a far transitare 11 veicoli sul ponte è dalle println ho notato che l'undicesimo veicolo non passa mai.
Secondo voi come posso risolvere il problema?
codice:
public class Ponte {
public final static int CAPIENZA=10;
private int vetture;
private Semaphore mutex,ponte;
public Ponte(){
vetture=0;
mutex=new Semaphore(1);
ponte=new Semaphore(CAPIENZA);
}
public void entra(int id){
try{
ponte.acquire();
mutex.acquire();
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println("La vettura "+id+" entra nel punte");
vetture++;
mutex.release();
}
public void esci(int id){
try{
mutex.acquire();
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println("La vettura "+id+" e' uscita dal ponte");
vetture--;
mutex.release();
ponte.release();
}
}