Sei sulla pagina 1di 3

Lectores y escritores: imaginemos una enorme base de datos, como

por ejemplo un sistema de reservaciones de en una línea aérea, con


muchos procesos en competencia, que intentan leer y escribir en ella.
Se puede aceptar que varios procesos lean la base de datos al mismo
tiempo, pero si uno de los procesos está escribiendo, (es decir
modificando) la base de datos, ninguno de los demás procesos deberá
tener acceso a esta, ni siquiera los lectores. El problema es como
programar a los lectores y escritores.

La cena de los filósofos: El problema de los filósofos cenando 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.

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 coge un tenedor y el otro está ocupado,
se quedará esperando, con el tenedor en la mano, hasta que pueda
coger 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 cogen 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.
El barbero dormilón: Una peluquería tiene un barbero, una silla de
peluquero y n sillas para que se sienten los clientes en espera, si es que
los hay. Si no hay clientes presentes, el barbero se sienta en su silla de
peluquero y se duerme. Cuando llega un cliente, este debe despertar al
barbero dormilón. Si llegan más clientes mientras el barbero corta el
cabello de un cliente, estos deben esperar sentados (si hay sillas
desocupadas) o salirse de la peluquería (si todas las sillas están
ocupadas). El problema consiste en programar al barbero y los clientes
sin entrar en condición de competencia.

El caso de los fumadores consiste en un grupo de fumadores que


para fumar necesitan los ingredientes que les faltan para hacer un
cigarrillo y fumárselo, poseen un ingrediente en cantidades ilimitadas,
pero les faltan otros dos. El agente posee cantidades ilimitadas de
todos los ingredientes que son papel, tabaco y cerillos, pero solo deja
en una mesa dos de estos ingredientes a la vez. Cada fumador posee
un ingrediente distinto de los tres

necesarios y según los ingredientes que deje el agente uno de los


fumadores podrá fumar con los dos ingredientes que el agente deja.

El agente y los fumadores representan en la realidad a procesos y


los ingredientes a los recursos de un sistema. La dificultad radica en
sincronizar los agentes y fumadores para que el agente cuando deje
ingredientes en la mesa el fumador correcto fume cuando.

A primera vista podríamos intentar que cada uno de los fumadores


tomase cada uno de los ingredientes que le falta y se pusiese a fumar
representando un ingrediente como un semáforo, sin embargo, esta
solución puede producir un bloqueo si uno de los otros fumadores que
no pueden fumar según los ingredientes que ha dejado el agente le
quitan al que podría fumar uno de los ingredientes que necesita. Por
ejemplo, un caso de bloqueo sería el caso de que el agente deje en la
mesa los ingredientes de tabaco y cerillas el fumador que podría fumar
sería el 1 pero si el fumador 2 es más rápido y se ejecuta antes
tomando el tabaco el fumador 1 se quedaría esperando a tomar
tabaco y el fumador 2 también por no haber dejado el agente papel
sino cerillas.

Potrebbero piacerti anche