/** * Utilizzo dei semafori binari per l'allocazione * delle risorse */ public class FilosofoSemaforo extends Filosofo { protected Semaforo [] bastoncini; protected int who; public FilosofoSemaforo(int who,Semaforo[] bastoncini){ super(""+who); this.bastoncini=bastoncini; this.who=who; }// fine costruttorevuoto public void gestione_risorse(){ System.out.println("Il filosofo "+nome+" Pensa"); long attesa= (long)(Math.random()*10000); try{Thread.sleep(attesa);}catch(InterruptedException ie){} System.out.println("Il filosofo "+nome+" Vuole il bastoncino destro"); bastoncini[(who+1)%5].P(); System.out.println("Il filosofo "+nome+" Ottiene il bastoncino destro"); System.out.println("Il filosofo "+nome+" Vuole il bastoncino sinistro"); bastoncini[who].P(); System.out.println("Il filosofo "+nome+" Ottiene il bastoncino sinistro"); System.out.println("Il filosofo "+nome+" Mangia"); attesa= (long)(Math.random()*10000); try{Thread.sleep(attesa);}catch(InterruptedException ie){} System.out.println("Il filosofo "+nome+" Rilascia il bastoncino destro"); bastoncini[(who+1)%5].V(); System.out.println("Il filosofo "+nome+" Rilascia il bastoncino sinistro"); bastoncini[who].V(); }// fine gestione risorse }// fine classe |
Listato 2 Implementazione con semaforo binario |