Red de conocimientos turísticos - Información de alquiler - El problema de la comida del filósofo

El problema de la comida del filósofo

El problema del filósofo comedor es un problema clásico en informática que se utiliza para demostrar los problemas que surgen al sincronizar múltiples subprocesos en computación paralela (sincronización).

En 1971, el famoso informático Ezig Dykoscher propuso un problema de sincronización, suponiendo que cinco ordenadores intentan acceder a cinco copias de una unidad de cinta que disfrutaban. Posteriormente, Tony Hall reformuló este problema como "El problema del comedor del filósofo". Este problema se puede utilizar para explicar los estancamientos y el agotamiento de los recursos.

Descripción del problema El problema del comedor del filósofo se puede formular de la siguiente manera: supongamos que hay cinco filósofos sentados alrededor de una mesa redonda, haciendo una de dos cosas: comer o pensar. Dejan de pensar cuando comen y dejan de comer cuando piensan. En el centro de la mesa había un gran plato de pasta, con un tenedor entre cada dos filósofos. Como comer pasta con un tenedor es difícil, supongamos que los filósofos deben comer con dos tenedores. Sólo pueden utilizar los dos tenedores de la izquierda y la derecha. El problema alimentario del filósofo se describe a veces en términos de arroz y palillos en lugar de fideos y tenedores, porque es obvio que se necesitan dos palillos para comer arroz.

Demostración del problema del comedor de los filósofos. Los filósofos nunca hablan entre sí. Esto es muy peligroso y puede causar un punto muerto. Cada filósofo sostiene un tenedor en su mano izquierda y siempre está esperando un tenedor en su derecha. mano (viceversa).

Incluso si no hay un punto muerto, es posible que se agoten los recursos. Por ejemplo, supongamos que la regla es que cuando el filósofo espera más de cinco minutos para tomar otro tenedor, deja el tenedor y espera otros cinco minutos para el siguiente intento. Esta estrategia elimina el punto muerto (el sistema siempre pasa al siguiente estado), pero el "bloqueo activo" aún es posible. Si cinco filósofos entran a un restaurante exactamente al mismo tiempo y recogen los tenedores de su izquierda al mismo tiempo, entonces los filósofos esperarán cinco minutos mientras dejan los tenedores, luego esperarán otros cinco minutos antes de recoger los tenedores al mismo tiempo. tiempo.

En un problema informático real, la falta de bifurcaciones se puede comparar con la falta de recursos para disfrutar. El bloqueo de recursos es una técnica informática común que se utiliza para garantizar que solo un programa o fragmento de código pueda acceder a un recurso en un momento dado. Cuando un programa quiere utilizar un recurso que está bloqueado por otro programa, espera a que se desbloquee el recurso. Los interbloqueos pueden ocurrir en ciertas situaciones cuando más de un programa está involucrado en el bloqueo de un recurso. Por ejemplo, un programa necesita acceder a dos archivos, y cuando ambos programas bloquean un archivo, ambos esperan a que el otro programa desbloquee el otro archivo, pero esto nunca sucede.

[editar] Solución[editar] Solución del camarero Una solución sencilla es presentar al camarero de un restaurante, el filósofo debe pedir permiso al camarero antes de coger el tenedor. Como el camarero sabe qué tenedor se está utilizando, puede tomar una decisión y evitar un punto muerto.

Para demostrar esta solución, supongamos que los filósofos están numerados de la A a la E. Si A y C están comiendo, entonces se utilizan cuatro tenedores. Supongamos que D quiere comer en este momento. Si toma la quinta bifurcación, podría haber un punto muerto. En cambio, si le pide permiso al camarero, éste le dirá que espere. De esta manera, podemos asegurarnos de que la próxima vez que haya dos bifurcaciones, uno de los filósofos obtenga con éxito un par de bifurcaciones, evitando así un punto muerto.

[editar] Otra solución simple a la solución jerárquica de recursos es especificar una relación jerárquica o no ordenada para el recurso (en este caso, la bifurcación) y aceptar que todos los recursos estarán en este orden. Adquirir y libere en orden inverso y al mismo tiempo se garantiza que el mismo trabajo no necesite dos recursos no relacionados al mismo tiempo. En el problema del comedor del filósofo, los recursos (tenedores) se numeran del 1 al 5 de acuerdo con una determinada regla. Cada unidad de trabajo (filósofo) siempre toma primero el tenedor con el número más bajo a la izquierda y a la derecha, y luego toma el tenedor con el número más bajo. tenedor numerado. Cuando terminaba de usar los tenedores, siempre dejaba primero el tenedor con el número más alto y luego el tenedor con el número más bajo. En este caso, cuando cuatro filósofos toman los tenedores con el número más bajo al mismo tiempo, solo queda sobre la mesa el tenedor con el número más alto, por lo que el quinto filósofo no puede usar ningún tenedor. Además, sólo un filósofo puede utilizar el tenedor con el número más alto, por lo que puede comer con dos tenedores.

Cuando terminaba de comer, dejaba el tenedor con el número más alto y luego el tenedor con el número más bajo, para que el otro filósofo pudiera tomar el tenedor con el número más bajo y empezar a comer.

Aunque la nivelación de recursos puede evitar puntos muertos, esta estrategia no siempre es práctica, especialmente cuando la lista de recursos necesarios no se conoce de antemano. Por ejemplo, si una unidad de trabajo ocupa los recursos 3 y 5 y decide que necesita el recurso 2, primero debe liberar 5, luego 3, para obtener 2, y luego debe volver a adquirir 3 y 5 en ese orden. Para un programa de computadora que necesita acceder a una gran cantidad de registros de bases de datos, no se ejecutará de manera eficiente si necesita publicar registros con números más altos antes de acceder a nuevos registros, por lo que este enfoque no es práctico.

Este enfoque suele ser la solución más práctica para los problemas informáticos del mundo real, que se pueden resolver especificando constantes para bloqueos jerárquicos que imponen el orden en que se adquieren los bloqueos.

Solución Chandy/Misra En 1984, K. Mani Chandy y J. Misra propusieron otra solución al problema de los filósofos del comedor, permitiendo a usuarios arbitrarios (numerados P1,...,Pn) competir por cualquier número de recursos. . La diferencia con la solución de Dikoscher es que el número aquí puede ser arbitrario.

1. Por cada par de filósofos que compiten por los recursos, toma un tenedor nuevo y dáselo al filósofo con un número menor. Cada tenedor está "limpio" o "sucio". Al principio todos los tenedores estaban sucios.

2. Cuando un filósofo quiere utilizar un recurso (es decir, comer), debe obtenerlo de sus vecinos competidores. Cada vez que se le acababan los tenedores, hacía un pedido.

3. Cuando el filósofo propietario del tenedor recibe una solicitud, si el tenedor está limpio, se lo quedará, de lo contrario lo limpiará y se lo devolverá a la otra parte.

4. Cuando un filósofo come, su tenedor se ensucia. Si otro filósofo hubiera pedido previamente uno de los tenedores, lo habría limpiado y se lo habría entregado.

Esta solución permite un paralelismo masivo y es aplicable a problemas arbitrariamente grandes.

El artículo decía: "Debido a que el vocabulario original de China no es suficiente, ahora tenemos mucho vocabulario absorbido de países extranjeros. Por ejemplo, en la conferencia de cuadros de hoy, la palabra " "cuadro" se aprende de países extranjeros. Necesitamos absorber más cosas nuevas de países extranjeros, no solo sus teorías progresistas, sino también sus términos nuevos. Los extranjeros aprenden la palabra "palillos" porque nunca antes los han usado y los encuentran muy nuevos. Más tarde, cuando encontré dificultades, me di cuenta de que los palillos no eran fáciles de usar, así que usé la palabra "palillos".

¡Espero que esto ayude!