El taller de los filósofos básicamente se hace para explicar el tema de semáforos e hilos.
El problema de los filósofos comensales es un problema clásico de las ciencias de computación propuesto por Edsger Dijkstra en 1965 para representar el problema de la sincronizacion de procesos en un sistema operativo.
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.
El algoritmo que planteamos para darle solución a este problemas es:
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 lo validamos 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 seria así:
Filósofos Pensando
El filosofo 2 pasa a estado de hambre, y como los filósofos de los costados no están comiendo empieza a Comer.
El filosofo 1 pasa a estado de Hambre y como el filosofo 2 esta comiendo se queda en estado de espera.
El filosofo 4 pasa a estado de Hambre y como los filósofos de los costados no están comiendo empieza a Comer.
Cuando el filosofo 2 termina de comer pasa a estado pensar, y activa al filosofo 1 que estaba en espera y empieza a comer.
El problema de los filósofos comensales es un problema clásico de las ciencias de computación propuesto por Edsger Dijkstra en 1965 para representar el problema de la sincronizacion de procesos en un sistema operativo.
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.
El algoritmo que planteamos para darle solución a este problemas es:
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 lo validamos 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 seria así:
Filósofos Pensando
El filosofo 2 pasa a estado de hambre, y como los filósofos de los costados no están comiendo empieza a Comer.
El filosofo 1 pasa a estado de Hambre y como el filosofo 2 esta comiendo se queda en estado de espera.
El filosofo 4 pasa a estado de Hambre y como los filósofos de los costados no están comiendo empieza a Comer.
Cuando el filosofo 2 termina de comer pasa a estado pensar, y activa al filosofo 1 que estaba en espera y empieza a comer.
El filosofo 5 pasa a estado de hambre y como los filósofos 1 y 4 están comiendo se queda en espera.
El filosofo 3 pasa a estado de hambre y como el filosofo 4 esta comiendo se queda en espera.
Cuando el filosofo 4 termina de comer pasa a estado pensar y activa el filosofo 3 que estaba en espera y empieza a comer.
Cuando el filosofo 1 termina de comer pasa a estado pensar y activa a filosofo 5 que estaba en espera y este empieza a comer.
Cuando el filosofo 3 termina de comer pasa a pensar.
Cuando el filosofo 5 termina de comer pasa a pensar.
Cuando los cinco filósofos terminan de comer, finaliza la ejecución del proceso.
Así demostramos que todos los filósofos comieron y se cumplió la regla establecida que todos no podían comer al mismo tiempo.
0 comentarios:
Publicar un comentario