Sistemas operativos modernos

2.4.1 El problema de la cena de los filósofos En 1965, Dijkstra planteó y resolvió un problema de sincronización al que llamó el problema de la cena de los filósofos. Desde entonces, todo aquel que ha inventado alguna primitiva de sincronización se ha sentido obligado a demostrar lo maravillosa que es, mostrando la elegan­ cia con la cual resuelve el problema de la cena de los filósofos. El planteamiento del proble­ ma es muy sencillo. Cinco filósofos están sentados en tomo a una mesa circular. Cada uno tiene un plato de espagueti. El espaguefi es tan escurridizo que se necesitan dos tenedores pa­ ra comerlo. Entre cada par de platos hay un tenedor. La disposición de la mesa se ilustra en la figura 2-31. Figura 2-31. Hora de comer en el departamento de filosofía. La vida de un filósofo consiste en periodos alternados de comer y pensar. (Esto es una abs­ tracción considerable, incluso hablando de filósofos, pero las demás actividades no vienen al ca­ so.) Cuando un filósofo siente hambre, trata de tomar los tenedores que están a su izquierda y a su derecha, uno a la vez, en cualquier orden. Si logra tomar los dos tenedores, come durante un tiempo, luego los deja en la mesa y sigue pensando. La pregunta clave es: ¿podemos escri­ bir un programa para cada filósofo que haga lo que debe hacer y nunca se atore? (Se ha seña­ lado que el requisito de usar dos tenedores es un tanto artificial; tal vez deberíamos cambiar de comida italiana a comida china, con arroz en lugar de espagueti, y palillos en vez de tenedores.) La figura 2-32 muestra la solución obvia. El procedimiento tomar_tenedor espera hasta que el tenedor especificado esté disponible y luego se apodera de él. Lamentablemente, la so­ lución obvia no es correcta. Supongamos que los cinco filósofos toman su tenedor izquierdo al mismo tiempo. Ninguno podrá tomar su tenedor derecho y se presentará un bloqueo irre­ versible. Podríamos modificar el programa de modo que después de tomar el tenedor izquierdo, el programa vea si el derecho está libre. Si no lo está, el filósofo deberá dejar el tenedor izquier-

RkJQdWJsaXNoZXIy MjI4NDcx