Jantar Filosofos
Trabalho Escolar: Jantar Filosofos. Pesquise 861.000+ trabalhos acadêmicosPor: juliana_b • 3/11/2014 • 1.372 Palavras (6 Páginas) • 304 Visualizações
public class Jantar {
public static void main(String[] args) {
Mesa m = new Mesa();
Thread f0 = new Filosofos(0, m);
Thread f1 = new Filosofos(1, m);
Thread f2 = new Filosofos(2, m);
Thread f3 = new Filosofos(3, m);
Thread f4 = new Filosofos(4, m);
f0.start();
f1.start();
f2.start();
f3.start();
f4.start();
}
public class Filosofos extends Thread {
private int cadeira;
private Mesa m;
private final int delay = 1000;
public Filosofos(int cadeira, Mesa m) {
this.cadeira = cadeira;
this.m = m;
}
public void run() {
while (true) {
pensar();
m.pegarGarfo(cadeira);
comer();
m.largarGarfos(cadeira);
m.mostraEstados();
}
}
public void pensar() {
try {
Thread.sleep((int) (delay * Math.random()));
} catch (Exception e) {
// TODO: handle exception
}
}
public void comer() {
try {
Thread.sleep((int) (delay * Math.random()));
} catch (Exception e) {
// TODO: handle exception
}
}
}
import java.util.concurrent.Semaphore;
public class Mesa {
private final int n = 5;
private final int faminto = 1;
private final int pensando = 0;
private final int comendo = 2;
private int estado[];
private Semaphore s[] = new Semaphore[] { new Semaphore(0),
new Semaphore(0), new Semaphore(0), new Semaphore(0),
new Semaphore(0) };
private Semaphore mutex;
private int left, right;
public Mesa() {
estado = new int[5];
mutex = new Semaphore(1);
}
public void pegarGarfo(int i) {
try {
mutex.acquire();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
estado[i] = faminto;
testar(i);
mutex.release();
try {
s[i].acquire();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void testar(int i) {
int ESQUERDA = (i+n-1)%n;
int DIREITA = (i+1)%n;
if (estado[i] == faminto && estado[ESQUERDA] != comendo
...