Problema de la cena de los filósofos

Si dos filósofos adyacentes intentan tomar el mismo tenedor a una vez, se produce una condición de carrera: ambos compiten por tomar el mismo tenedor, y uno de ellos se queda sin comer.

Si todos los filósofos toman el tenedor que está a su derecha al mismo tiempo, entonces todos se quedarán esperando eternamente, porque alguien debe liberar el tenedor que les falta.

Nadie lo hará porque todos se encuentran en la misma situación (esperando que alguno deje sus tenedores).

Se empieza por un filósofo, que si quiere puede comer y después pasa su turno al de la derecha.

Por ejemplo cada 5 minutos se pasan las fichas (y los turnos) a la derecha.

Si el tiempo de turno se aproxima al tiempo medio que tarda un filósofo en comer esta variante da muy buenos resultados.

Cuando un filósofo quiere comer se pone en la cola de los dos tenedores que necesita.

Esto crea el problema comentado de que si todos quieren comer a la vez y todos empiezan tomando el tenedor de su derecha se bloquea el sistema (deadlock).

Es importante que el tiempo de espera sea aleatorio o se mantendrá el bloqueo del sistema.

En un entorno distribuido, una interrupción en la coordinación entre nodos o procesos puede afectar la integridad de los datos y el rendimiento general del sistema.

Ilustración del problema de la cena de los filósofos.