fbpx
Wikipedia

Problema de la cena de los filósofos

El problema de la cena de los filósofos o problema de los filósofos cenando (dining philosophers problem) es un problema clásico de las ciencias de la computación propuesto por Edsger Dijkstra en 1965 para representar el problema de la sincronización de procesos en un sistema operativo. Cabe aclarar que la interpretación está basada en pensadores chinos, quienes comían con dos palillos, donde es más lógico que se necesite el del comensal que se siente al lado para poder comer.

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

Enunciado del problema

Cinco filósofos se sientan alrededor de una mesa y pasan su vida cenando y pensando. Cada filósofo tiene un plato de fideos y un tenedor a la izquierda de su plato. Para comer los fideos son necesarios dos tenedores y cada filósofo sólo puede tomar los que están a su izquierda y derecha. Si cualquier filósofo toma un tenedor y el otro está ocupado, se quedará esperando, con el tenedor en la mano, hasta que pueda tomar el otro tenedor, para luego empezar a comer.

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). Entonces los filósofos se morirán de hambre. Este bloqueo mutuo se denomina interbloqueo o deadlock.

El problema consiste en encontrar un algoritmo que permita que los filósofos nunca se mueran de hambre.

Diversas soluciones posibles

  • Por turno cíclico

Se empieza por un filósofo, que si quiere puede comer y después pasa su turno al de la derecha. Cada filósofo sólo puede comer en su turno. Problema: si el número de filósofos es muy alto, uno puede morir de hambre antes de su turno.

  • Varios turnos

Se establecen varios turnos. Para hacerlo más claro supongamos que cada filósofo que puede comer (es su turno) tiene una ficha que después pasa a la derecha. Si por ejemplo hay 7 comensales podemos poner 3 fichas en posiciones alternas (entre dos de las fichas quedarían dos filósofos).

Se establecen turnos de tiempo fijo. Por ejemplo cada 5 minutos se pasan las fichas (y los turnos) a la derecha.

Con base al tiempo que suelen tardar los filósofos en comer y en volver a tener hambre, el tiempo de turno establecido puede hacer que sea peor solución que la anterior. Si el tiempo de turno se aproxima al tiempo medio que tarda un filósofo en comer esta variante da muy buenos resultados. Si además el tiempo medio de comer es similar al tiempo medio en volver a tener hambre la solución se aproxima al óptimo.

  • Colas de tenedores

Cuando un filósofo quiere comer se pone en la cola de los dos tenedores que necesita. Cuando un tenedor está libre lo toma. Cuando toma los dos tenedores, come y deja libre los tenedores.

Visto desde el otro lado, cada tenedor sólo puede tener dos filósofos en cola, siempre los mismos.

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).

  • Resolución de conflictos en colas de tenedores

Cada vez que un filósofo tiene un tenedor espera un tiempo aleatorio para conseguir el segundo tenedor. Si en ese tiempo no queda libre el segundo tenedor, suelta el que tiene y vuelve a ponerse en cola para sus dos tenedores.

Si un filósofo A suelta un tenedor (porque ha comido o porque ha esperado demasiado tiempo con el tenedor en la mano) pero todavía desea comer, vuelve a ponerse en cola para ese tenedor. Si el filósofo adyacente B está ya en esa cola de tenedor (tiene hambre) lo toma y si no vuelve a cogerlo A.

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

  • El portero del comedor

Se indica a los filósofos que abandonen la mesa cuando no tengan hambre y que no regresen a ella hasta que vuelvan a estar hambrientos (cada filósofo siempre se sienta en la misma silla). La misión del portero es controlar el número de filósofos en la sala, limitando su número a n-1, pues si hay n-1 comensales seguro que al menos uno puede comer con los dos tenedores.

Véase también

Referencias

Enlaces externos

  •   Wikilibros alberga un libro o manual sobre Programación en Ada.

Ejemplos de problemas clásicos de sincronización

  •   Datos: Q865867
  •   Multimedia: Dining philosophers

problema, cena, filósofos, este, artículo, sección, necesita, referencias, aparezcan, publicación, acreditada, este, aviso, puesto, octubre, 2018, problema, cena, filósofos, problema, filósofos, cenando, dining, philosophers, problem, problema, clásico, cienci. Este articulo o seccion necesita referencias que aparezcan en una publicacion acreditada Este aviso fue puesto el 10 de octubre de 2018 El problema de la cena de los filosofos o problema de los filosofos cenando dining philosophers problem es un problema clasico de las ciencias de la computacion propuesto por Edsger Dijkstra en 1965 para representar el problema de la sincronizacion de procesos en un sistema operativo Cabe aclarar que la interpretacion esta basada en pensadores chinos quienes comian con dos palillos donde es mas logico que se necesite el del comensal que se siente al lado para poder comer Ilustracion del problema de la cena de los filosofos Indice 1 Enunciado del problema 2 Diversas soluciones posibles 3 Vease tambien 4 Referencias 5 Enlaces externosEnunciado del problema EditarCinco filosofos se sientan alrededor de una mesa y pasan su vida cenando y pensando Cada filosofo tiene un plato de fideos y un tenedor a la izquierda de su plato Para comer los fideos son necesarios dos tenedores y cada filosofo solo puede tomar los que estan a su izquierda y derecha Si cualquier filosofo toma un tenedor y el otro esta ocupado se quedara esperando con el tenedor en la mano hasta que pueda tomar el otro tenedor para luego empezar a comer Si dos filosofos adyacentes intentan tomar el mismo tenedor a una vez se produce una condicion de carrera ambos compiten por tomar el mismo tenedor y uno de ellos se queda sin comer Si todos los filosofos toman el tenedor que esta a su derecha al mismo tiempo entonces todos se quedaran esperando eternamente porque alguien debe liberar el tenedor que les falta Nadie lo hara porque todos se encuentran en la misma situacion esperando que alguno deje sus tenedores Entonces los filosofos se moriran de hambre Este bloqueo mutuo se denomina interbloqueo o deadlock El problema consiste en encontrar un algoritmo que permita que los filosofos nunca se mueran de hambre Diversas soluciones posibles EditarPor turno ciclicoSe empieza por un filosofo que si quiere puede comer y despues pasa su turno al de la derecha Cada filosofo solo puede comer en su turno Problema si el numero de filosofos es muy alto uno puede morir de hambre antes de su turno Varios turnosSe establecen varios turnos Para hacerlo mas claro supongamos que cada filosofo que puede comer es su turno tiene una ficha que despues pasa a la derecha Si por ejemplo hay 7 comensales podemos poner 3 fichas en posiciones alternas entre dos de las fichas quedarian dos filosofos Se establecen turnos de tiempo fijo Por ejemplo cada 5 minutos se pasan las fichas y los turnos a la derecha Con base al tiempo que suelen tardar los filosofos en comer y en volver a tener hambre el tiempo de turno establecido puede hacer que sea peor solucion que la anterior Si el tiempo de turno se aproxima al tiempo medio que tarda un filosofo en comer esta variante da muy buenos resultados Si ademas el tiempo medio de comer es similar al tiempo medio en volver a tener hambre la solucion se aproxima al optimo Colas de tenedoresCuando un filosofo quiere comer se pone en la cola de los dos tenedores que necesita Cuando un tenedor esta libre lo toma Cuando toma los dos tenedores come y deja libre los tenedores Visto desde el otro lado cada tenedor solo puede tener dos filosofos en cola siempre los mismos 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 Resolucion de conflictos en colas de tenedoresCada vez que un filosofo tiene un tenedor espera un tiempo aleatorio para conseguir el segundo tenedor Si en ese tiempo no queda libre el segundo tenedor suelta el que tiene y vuelve a ponerse en cola para sus dos tenedores Si un filosofo A suelta un tenedor porque ha comido o porque ha esperado demasiado tiempo con el tenedor en la mano pero todavia desea comer vuelve a ponerse en cola para ese tenedor Si el filosofo adyacente B esta ya en esa cola de tenedor tiene hambre lo toma y si no vuelve a cogerlo A Es importante que el tiempo de espera sea aleatorio o se mantendra el bloqueo del sistema El portero del comedorSe indica a los filosofos que abandonen la mesa cuando no tengan hambre y que no regresen a ella hasta que vuelvan a estar hambrientos cada filosofo siempre se sienta en la misma silla La mision del portero es controlar el numero de filosofos en la sala limitando su numero a n 1 pues si hay n 1 comensales seguro que al menos uno puede comer con los dos tenedores Vease tambien EditarProblema del barbero durmienteReferencias EditarEnlaces externos Editar Wikilibros alberga un libro o manual sobre Programacion en Ada Ejemplos de problemas clasicos de sincronizacion Datos Q865867 Multimedia Dining philosophersObtenido de https es wikipedia org w index php title Problema de la cena de los filosofos amp oldid 120107836, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos