informatica
Había una vez cinco filósofos que vivían juntos. La vida de cada filósofo consistía principalmente en pensar y comer y, tras años de pensar, todos los filósofosse habían puesto de acuerdo en que la única comida que contribuía a sus esfuerzos era el arroz.
Los preparativos de la comida eran simples: una mesa redonda en la que había cinco platos de arroz,uno para cada filósofo, y cinco palillos. Un filósofo que quisiera comer iría a su lugar asignado en la mesa y, usando los dos palillos de cada lado del plato, se comería el arroz. El problema es elsiguiente: inventar un ritual (algoritmo) que permita comer a los filósofos. El algoritmo debe satisfacer la exclusión mutua (dos filósofos no pueden emplear el mismo palillo a la vez), además de evitarel interbloqueo y la inanición (en este caso, este ultimo término tiene un significado literal además del algorítmico).
/* Programa cena de los filósofos. Sin interbloqueo */
#define N 5 //N =numero de comensales, palillos, filósofos, etc…
semáforo palillo[N]={1}; //arreglo de N semáforos que representan los palillos. Todos en 1
void filosofo (int i) //proceso de cada filosofo
{while (true) //bucle infinito, se puede colocar condición de parada con variable
{
pensar ( ); //tiempo de espera aleatorio de c/filosofo antes de ‘comer’
wait (palillo [i], palillo[i +1] mod5); //pido los 2 palillos simultáneamente
comer ( ); //tiempo de espera mientras come (puede ser aleatorio)
signal (palillo [i]); //libero palillo izquierdo
signal (palillo [(i + 1) mod 5]);//libero palillo derecho
/* El orden en que libero los palillos no es de especial relevancia. */
}
}
void main()
{
parbegin (filosofo (0), filosofo (1), filosofo (2), filosofo (3), …,filosofo (N));
//inicio de los procesos (filósofos)
}
En ciencias de la computación, el problema del barbero durmiente es un problema de sincronización. El problema consiste en una barbería en...
Regístrate para leer el documento completo.