Algoritmo filosofos comensales
Érase una vez cinco filósofos que vivían juntos. La vida de cada filósofo consistía principal-mente en pensar y comer y, tras años de pensar, todos los filósofos sehabían puesto de acuerdo en que la única comida que contribuía a sus esfuerzos pensadores eran los espaguetis.
Los preparativos de la comida eran simples: una mesa redonda en la que había unagran fuente de espaguetis, cinco platos, uno para cada filósofo y cinco tenedores. Un filósofo que quiera comer irá a su lugar asignado en la mesa y, usando los dos tenedores de cada lado delplato, cogerá los espaguetis y se los comerá. El problema es el siguiente: Inventar un ritual (algoritmo) que permita comer a los filósofos. El algoritmo debe satisfacer la exclusión mutua (dosfilósofos no pueden emplear el mismo tenedor a la vez), además de evitar el interbloqueo y la inanición
Código en java de su solución
Creamos una clase llamada controlador
*
* To change thistemplate, choose Tools | Templates
* and open the template in the editor.
*/
package filosofos;
/**
*
* @author PERSONAL
*/
public class Controlador {
private static finalint pensando = 0;
private static final int hambriento = 1;
private static final int comiendo = 2;
private int n; //numero de filosofos
private int estado[];
public Controlador(intn) {
this.n = n;
estado = new int[n]; //estado del filosofo
}
// EL FILOSOFO id intenta SUS TENEDORES
public synchronized void tomarTenedores(int id) {
estado[id] =hambriento; // establece que tiene hambre
prueba(id);
while (estado[id] != comiendo) // ESPERA x 2 TENEDORES
try { wait();
} catch (Exception e) { System.out.println(e);}
}
// ELFILOSOFO id SUELTA SUS TENEDORES
public synchronized void soltarTenedores(int id) {
int der, izq;
//calcula la posicion a su derecha e izq.
der=(id+1) % n;
izq=id-1;
if (izq
Regístrate para leer el documento completo.