canibales

1. DEFINICIÓN DEL PROBLEMA En una tribu de caníbales todos comen de la misma olla, la cual puede albergar N raciones de

Views 89 Downloads 11 File size 76KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

1. DEFINICIÓN DEL PROBLEMA 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.

2. OBJETIVO Analizar, comprender e implementar el problema de los caníbales y misioneros, haciendo uso de los semáforos y monitores, destacando las ventajas y desventajas en la implementación. 3. ALGORITMO Para la resolución de este problema tendríamos dos casos, uno en el cual un caníbal desea comer si hay misioneros en la olla pues se sirve uno, caso contrario si la olla se encuentra vacia despierta al cocinero y espera a que ese llene la olla nuevamente. Teniendo en cuenta el planteamiento tendríamos las funciones q 4. DIAGRAMA DE FLUJO

5. PSEUDOCODIGO Programa caníbal_misionero

Variables olla,m,j enteros

mutex,comer,cocina semaforos

proceso canibal

comenzar repetir espere mutex si olla=0 comenzar desbloquear cocina espere comer fin j:=j+1 'Canibal comiendo' olla=olla-1 desbloquear mutex para siempre fin

proceso cocinero comenzar repetir espere cocina

olla=m j=j+1 'Cocinero llena la olla' desbloquear comer para siempre fin //función principal comenzar j=0 inicializar mutex=1 inicializar cocina=0 inicializar comer=0 escribir

:Ingrese la cantidad de porciones de la olla'

leer m cobegin canibal cocinero coend fin

6. CÓDIGO FUENTE CÓDIGO EN SEMÁFOROS : program prueba1;

var olla,m,j:integer; mutex,comer,cocina:semaphore;

process canibal;

begin repeat

wait(mutex); if olla=0 then begin signal(cocina); wait(comer); end; j:=j+1; writeln('Canibal comiendo'); olla:=olla-1; signal(mutex); forever end;

process cocinero; begin

repeat wait(cocina); olla:=m; j:=j+1; writeln('Cocinero llena la olla'); signal(comer);

forever end;

begin j:=0; initial(mutex,1); initial(cocina,0); initial(comer,0); writeln('Ingrese la cantidad de porciones de la olla'); readln(m); cobegin canibal; cocinero; coend; end.

7. ARTÍCULO CIENTÍFICO

8. APLICACIÓN REAL

9. BIBLIOGRAFÍA Palma mendes , j. t. (2003). programacion concurrente . españa. Vallejo Fernadez, D. (2012). programacion concurrente y tiempo real. España: Edlibrix.