Informe
DEFINICIÓN DEL PROBLEMA
Los caníbales comensales
En una tribu de caníbales todos comen de la misma olla, la cual puede albergar N raciones de comida. Cuando un caníbal quiere comer,simplemente se sirve de la olla común, a no ser que esté vacía. En ese caso, el caníbal despierta al cocinero de la tribu y espera hasta que éste haya rellenado la olla.
En este problema, los eventos desincronización son dos:
Si un caníbal que quiere comer se encuentra con la olla vacía, entonces se lo notifica al cocinero para que éste cocine.
Cuando el cocinero termina de cocinar, entoncesse lo notifica al caníbal que lo despertó previamente.
Un posible planteamiento para solucionar este problema podría girar en torno al uso de un semáforo que controlara el número de racionesdisponibles en un determinado momento (de manera similar al problema del buffer limitado). Sin embargo, este planteamiento no facilita la notificación al cocinero cuando la olla esté vacía, ya que no esdeseable acceder al valor interno de un semáforo y, en función del mismo, actuar de una forma u otra.
Una alternativa válida consiste en utilizar el patrón marcador para controlar el número de racionesde la olla mediante una variable compartida. Si ésta alcanza el valor de 0, entonces el caníbal podría despertar al cocinero.
La sincronización entre el caníbal y el cocinero se realiza medianterendezvous.
1. El caníbal intenta obtener una ración.
2. Si no hay raciones en la olla, el caníbal despierta al cocinero.
3. El cocinero cocina y rellena la olla.
4. El cocinero notifica alcaníbal.
5. El caníbal come.
OBJETIVOS
-Asegurar que los caníbales no mueran de hambre; es decir, debe haber comida en la olla, caso contrario, se debe esperar a que el cocinero la rellene.ALGORITMO
PSEUDOCÓDIGO
Una posible solución a la premisa dada, puede ser el siguiente pseudocódigo:
Código fuente...
Regístrate para leer el documento completo.