Está en la página 1de 4

Planteamiento. En 1965, Dijkstra plante y resolvi un problema de sincronizacin llamado el problema de la cena de los filsofos.

Cinco filsofos se sientan a la mesa. Cada uno tiene un plato de espagueti. El espagueti es tan escurridizo que un filsofo necesita dos tenedores para comerlo. Entre cada dos platos hay un tenedor. La vida de un filsofo consta de periodos alternados de comer y pensar. Cuando un filsofo tiene hambre intenta obtener un tenedor para su manos izquierda y otro para su mano derecha, alzando uno a la vez y en cualquier orden. Si logra obtener los dos tenedores, come un rato y despus deja los tenedores y contina pensando. Anlisis. Debe haber el mximo nmero de filsofos comiendo, para aprovechar los tenedores, este caso slo dos porque se necesitan dos tenedores por filsofo, y slo tenemos cinco. Debe tenerse cuidado de que dos filsofos contiguos no lleguen al mismo tiempo a comer, ya que se generara un bloqueo. Planteamiento de la solucin. Se tiene un arreglo para ver el estado del filsofo. Un filsofo slo puede comer si sus vecinos no lo hacen. Se utilizan semforos para indicar si los filsofos necesitan un tenedor y ste no est disponible, por que se procede a bloquearlo. Se toma en cuenta el vecino derecho e izquierdo de cada filsofo. Se usan generadores aleatorios

Soluciones Alternativas
Turnos cclicos: Se empieza por un filsofo, que si quiere puede comer y despus pasa su turno al de la derecha. Cada filsofo slo puede comer en su turno Varios turnos: Se establecen turnos de tiempo fijo, el mismo se debe aproximar al tiempo medio que tarda un filsofo en comer Colas de tenedores: Cada vez que un filsofo 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

Figura 4.17. Una solucin al problema de la cena de los filsofos El lector podra pensar: "si los filsofos esperaran un tiempo arbitrario, en vez del mismo tiempo, despus de que no pudieran coger el tenedor derecho, la probabilidad de que todo quedara bloqueado, incluso una hora, sera muy pequea". Esta observacin es correcta, pero en ciertas aplicaciones se desea una solucin que funcione siempre, y no que pueda funcionar bien con gran probabilidad. (Piense en el control de seguridad de una planta nuclear). Una mejora a la figura 4.16, que no tiene interbloqueos ni aplazamiento indefinido, es la proteccin de los cinco enunciados siguientes a la llamada al procedimiento pensar mediante un semforo binario exmut. Antes de empezar a coger los tenedores, un filsofo hara un wait sobre exmut. Desde el punto de vista terico esta solucin es adecuada. Desde el punto de vista prctico presenta un error de eficiencia: en todo instante existir a lo sumo un filsofo comiendo. Si se dispone de cinco tenedores, se debera permitir que dos filsofos comieran al mismo tiempo. La solucin que aparece en la figura 4.17 es correcta, y permite el mximo paralelismo para un nmero arbitrario de filsofos. Utiliza un vector, estado, para llevar un registro de la actividad de un filsofo: si est comiento, pensando o hambriento (estado que indica que quiere coger los tenedores). Un filsofo puede comer nicamente si los vecinos no estn comiendo. Los vecinos del i-simo filsofo se definen en las macros IZQ y DER. En otras palabras, si i= 2, entonces IZQ = 1, y DER = 3. El programa utiliza un vector de semforos, uno por filsofo, de forma que los filsofos hambrientos puedan bloquearse si los tenedores necesarios estn ocupados. Observe que cada proceso ejecuta el procedimiento filsofo como programa principal, pero los dems procedimientos, coger_tenedores, dejar_tenedoresy prueba, son procedimientos ordinarios y no procesos separados.

También podría gustarte