¿Cómo podemos evitar la inanición en el problema de los filósofos?

¿Qué tal si matas a tres filósofos y los dos restantes pueden comer infinitamente? Incluso obtienen un palillo de repuesto. Sin punto muerto, sin bloqueo en vivo, problema resuelto. 🙂

Bromas aparte, por ejemplo, tiene una función que actualiza dos variables y necesita poder paralelizar estas funciones, es decir, desea que diferentes hilos llamen a la función con cada una actualizando algunas (dos) variables. Los hilos son sus filósofos, mientras que las dos variables son los palillos.

Para garantizar un subproceso seguro, debe asegurarse de que no haya dos subprocesos que modifiquen estas dos variables al mismo tiempo. Una forma de hacerlo es bloquear las variables mientras un hilo lo está actualizando, para que otros hilos no tengan acceso. Esto se llama exclusión mutua (mutex). Una vez que el hilo termina de actualizar cada variable, lo libera (desbloquea) (las variables) para que estén disponibles para otros hilos (en espera), que compiten para obtener acceso. Pero solo se lanza una variable a la vez. Entonces, los hilos deben esperar para tener acceso a ambas variables antes de ejecutarse. Si esta concurrencia no se maneja con cuidado, podría dar lugar a una situación en la que un subproceso realmente rápido (alta prioridad) puede bloquear el acceso a ambas variables, liberarlo cuando termine y obtenerlo inmediatamente después. De esta manera, otros subprocesos (de baja prioridad) nunca tendrán la oportunidad de usar los recursos compartidos y, por lo tanto, pasar hambre. Este es el problema de los filósofos de comedor (hambrientos en este caso), es decir, ¿cómo se asegura de que cada hilo reciba su ‘oportunidad’ sin esperar demasiado en la cola?

Para mitigar esto, puede implementar un protocolo de manera que cada hilo después de usar un recurso no pueda obtenerlo inmediatamente después de liberarlo. Deben esperar una cierta cantidad de tiempo antes de que puedan intentar adquirirlo.

Otra forma sería implementar una cola de prioridad, de modo que la prioridad de los subprocesos aumenta cuanto más tiempo hayan estado esperando. De modo que durante la condición de carrera, el hilo con la prioridad más alta gana. De esta manera, incluso los subprocesos iniciales de baja prioridad pueden acceder a los recursos, ya que su prioridad aumenta con el tiempo de espera.

Para aquellos que necesitan una declaración completa de este problema clásico en Comp.Sci:

Cinco filósofos silenciosos se sientan en una mesa redonda con cuencos de espagueti . Las horquillas se colocan entre cada par de filósofos adyacentes.

Cada filósofo debe pensar y comer alternativamente. Sin embargo, un filósofo solo puede comer espagueti cuando tiene tenedores izquierdo y derecho. Cada tenedor puede ser sostenido por un solo filósofo, por lo que un filósofo puede usar el tenedor solo si no lo está utilizando otro filósofo. Después de que un filósofo individual termina de comer, debe dejar ambos tenedores para que los tenedores estén disponibles para otros. Un filósofo puede tomar el tenedor a su derecha o el de su izquierda a medida que estén disponibles, pero no puede comenzar a comer antes de obtener ambos tenedores.

Comer no está limitado por las cantidades restantes de espagueti o espacio estomacal; se supone una oferta infinita y una demanda infinita.

El problema es cómo diseñar una disciplina de comportamiento (una concurrencia algoritmo ) de modo que ningún filósofo se muera de hambre; es decir, cada uno puede continuar alternando para siempre entre comer y pensar, suponiendo que ningún filósofo pueda saber cuándo otros pueden querer comer o pensar.

La respuesta clásica requiere que numeres los tenedores … digamos que los numeramos del 1 al 5.

La regla que los filósofos están de acuerdo es que tratarán de recoger el número más bajo de los dos tenedores que están a cada lado antes de elegir el número más alto. Creo que funcionalmente es lo mismo que su solución porque cuatro de los filósofos tienen los tenedores con el número más bajo a su izquierda, pero un tipo está sentado entre los tenedores 1 y 5, y él elegirá el que está a su derecha.

Pero, como usted dice, esto no ayuda con el problema del ‘hambre’. Para eso necesitas:

El problema de los filósofos gastronómicos – Chandy Misra Solution

… Y te dejaré que leas la página de Wikipedia para obtener la respuesta porque es complicado y no quiero equivocarme.

Sin embargo, esa solución requiere que los filósofos hablen entre sí, lo que no estaba permitido en la declaración original del problema.

Sin comunicaciones, la numeración de las horquillas solo puede resolver el punto muerto, no el hambre. No creo que haya una solución al problema de inanición con la declaración original del problema.