Filósofos Comensales ( Dijkstra, 1965 )
• Cinco filósofos pasan la vida pensando y comiendo
• Cuando un filósofo piensa, no interactúa con sus colegas.
• Cuando tiene hambre, toma los dos palillos al mismo tiempo y come sin soltarlos.
• Cuando termina de comer, coloca los dos palillos sobre la mesa y comienza a pensar.
• Necesidad de asignar varios recursos entre varios procesos sin que haya bloqueos mutuos ni inanición
Primera Solución
• Representar cada palillo con un semáforo
•
Un filósofo trata de tomar un palillo ejecutando una operación espera con ese
semáforo, y suelta sus palillos ejecutando la operación señal con los semáforos
apropiados.
var palillo: array [0..4] of
semáforo;
• Inicialmente todos los elementos de palillo
están en 1
Primera Solución
• Garantiza que dos vecinos no estarán
comiendo simultáneamente • Posibilidad de bloqueo mutuo •Suponga que los cinco
filósofos sienten hambre simultáneamente y cada uno toma su palillo izquierdo
Posibles soluciones al problema de bloqueos
Permitir que como máximo filósofos se sienten
a la mesa cuatro filósofos
Sólo permitir que un filósofo tome sus
palillos si ambos están disponibles ( dentro de la sección crítica )
Solución asimétrica è Un filósofo impar toma
primero su palillo izquierdo y luego el derecho, mientras que un filósofo par
toma primero su palillo derecho y luego el izquierdo.
Cualquier solución satisfactoria deberá
evitar la posibilidad que uno de los filósofos muera de hambre.
Una solución libre de bloqueos mutuos no elimina
necesariamente la posibilidad de inanición
Solución por monitores
Distinguir entre los tres estados en los que podría estar un filósofo è Pensando, hambriento y comiendo
Definir el estado del mismo
filósofo
existe un determinado objeto que se va a ser
utilizado y compartido por una serie de procesos concurrentes.
• Un objeto se va a compartir
entre varios usuarios, algunos solo quieren leer el contenido ( lectores ),
otros quieren actualizarlo (escritores)
Restricciones
• Sólo se permite que un escritor
tenga acceso al objeto al mismo tiempo. •Mientras el escritor esté accediendo
al objeto, ningún otro proceso lector ni escritor podrá acceder a él.
•
Se permite que múltiples lectores tengan acceso al objeto, ya que ellos nunca
van a modificar el contenido del mismo
Un objeto se va a compartir entre
varios usuarios, algunos solo quieren leer el contenido ( lectores), otros
quieren actualizarlo (escritores)
Buena aporte, gracias!!!
ResponderEliminarala merga sos chingon jajajaj
ResponderEliminar