Enunciado
Cinco filósofos se pasan al rededor de una mesa y pasan su vida cenando y pensando. Cada filósofo tiene un plato de espagueti y un tenedor a la izquierda de su plato. Para comer el espagueti son necesarios dos tenedores y cada filósofo solo puede tomar el que se encuentra a su derecha y a su izquierda. Si cualquier filósofo coge un tenedor y el otro está ocupado se quedará esperando con el tenedor en su la mano hasta que pueda tomar el otro tenedor para luego empezar a comer.
Historia
Es un problema clásico de las ciencias de la computación
propuesto por el científico Edsger Dijkstra para representar los inconvenientes
que plantea la sincronización de procesos en un sistema operativo
Desarrollo
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 se quedarán 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. A este bloqueo mutuo se le
denomina interbloqueo o deadlock.
El objetivo consiste en encontrar un recurso que permita que
los filósofos nunca se mueran de hambre. Porque:
– Dos filósofos contiguos no pueden comer a la vez
(exclusión mutua).
– Si un filósofo está comiendo, los contiguos no pueden
hacerlo hasta que aquél termine (sincronización).
– El filósofo que termina de comer debe ceder los palillos
para su posterior utilización (interbloqueo).
Este sencillo planteamiento resulta muy útil para los que
estudian informática porque ayuda a pensar en los sistemas que tienen recursos
limitados (en el ejemplo anterior los palillos son limitados) y en los clientes
(programas y usuarios): hay que darles servicio (comida) a todos en un tiempo
razonable.
Se trata de que los recursos sean utilizados de la manera
más eficiente por todos los procesos implicados. Hay algoritmos para
solucionarlo pero todos los métodos pasan por asignar prioridades y/o tiempos
máximos de uso de los recursos.
La finalidad es demostrar que se presentarán problemas ante
la falta de una apropiada sincronización y evitar la peligrosa condición de
carrera.