import java.io.*; import java.lang.*; class Semaforo{ int value; public Semaforo() { value = 1; } public Semaforo(int value) { this.value = value; } public synchronized void up() { value++; notify(); } public synchronized void down() { while (value<=0){ try {wait();} catch(InterruptedException e) { }; } value--; } } class Filosofo extends Thread { Semaforo sx,dx; // semafori destro e sinistro int numero; // numero del filosofo public Filosofo(int numero,Semaforo sx, Semaforo dx) {this.sx = sx; this.dx = dx; this.numero = numero; } public void run() { while(true) { System.out.println("Filosofo "+numero+" pensa"); sx.down(); dx.down(); System.out.println("Filosofo "+numero+" mangia"); sx.up(); dx.up(); } } } public class pcp13 { public static void main(String argv[]) { Semaforo s1 = new Semaforo(1); //init Semaforo s2 = new Semaforo(1); Semaforo s3 = new Semaforo(1); Semaforo s4 = new Semaforo(1); Semaforo s5 = new Semaforo(1); Filosofo f1 = new Filosofo(1,s1,s2); Filosofo f2 = new Filosofo(2,s2,s3); Filosofo f3 = new Filosofo(3,s3,s4); Filosofo f4 = new Filosofo(4,s4,s5); Filosofo f5 = new Filosofo(5,s5,s1); f1.start(); f2.start(); f3.start(); f4.start(); f5.start(); } }