TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

Jantar Filosofos

Trabalho Escolar: Jantar Filosofos. Pesquise 862.000+ trabalhos acadêmicos

Por:   •  3/11/2014  •  1.372 Palavras (6 Páginas)  •  314 Visualizações

Página 1 de 6

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

...

Baixar como (para membros premium)  txt (3.8 Kb)  
Continuar por mais 5 páginas »
Disponível apenas no TrabalhosGratuitos.com