Filósofos comensales

jimmyleiva07
Filósofos comensales
  • UNAN-Managua
Sistemas operativos I
Elaborado por:
 
Jimmy Alemán leiva
 
  • Introducción
En 1965, Dijkstra propuso y resolvió un problema de sincronización al que llamó el problema de los filósofos comelones. El ejercicio dice que hay cinco filósofos sentados alrededor de una mesa que pasan su vida cenando y pensando.
 Cada uno dispone de un plato de arroz y un palillo a la izquierda de su plato, pero para comer son necesarios dos palillos y cada filosofo solo puede coger el que esta a su izquierda o el que hay a su derecha. Con un solo palillo en la mano no tienen mas remedio que esperar hasta que atrapen otro y puedan seguir comiendo. 
 
Si dos filósofos adyacentes intentan tomar el mismo palillo a la vez se produce una condición de carrera: ambos compiten por lo mismo pero uno se queda sin comer.

Si todos los filósofos cogen el palillo de su derecha al mismo tiempo, todos quedaran esperando eternamente porque alguien debe liberar el palillo que les falta, cosa que nadie hará porque todos se encuentran en la misma situación (esperando que alguno deje su palillo). Llegado esto, los filósofos se morirán de hambre.  
Algoritmo para darle solución a este problema: 
1. Los filósofos empiezan en el estado Pensando.

 2. Después le damos un nombre a cada filosofo.

3. Validamos si el filosofo i tiene hambre y si los filósofos de los costados no están comiendo. Si esto se cumple el filosofo i comienza a comer. Esto se valida con un for.

4.Luego cambiamos el estado del filosofo a Hambre y verificamos que si no pasa a Comer, tiene que esperar su turno.

5.Luego que el filosofo haya terminado de Comer, pasa a estado Pensando y luego validamos si los filósofos de los costados tienen Hambre.  

La simulación sería así:
Filósofos Pensando:
El filósofo 2 pasa a estado de hambre, y como los filósofos de los costados no están comiendo empieza a Comer.
; ;

emaze