1.
DEFINICIN DEL PROBLEMA
En una tribu de canbales todos comen de la misma olla, la cual puede albergar N
raciones de comida. Cuando un canbal quiere comer, simplemente se sirve de la olla
comn, a no ser que est vaca. En ese caso, el canbal 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 canbales y misioneros,
haciendo uso de los semforos y monitores, destacando las ventajas y desventajas en la
implementacin.
3. ALGORITMO
Para la resolucin de este problema tendramos dos casos, uno en el cual un canbal
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 tendramos las funciones q
4. DIAGRAMA DE FLUJO
5. PSEUDOCODIGO
Programa canbal_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
//funcin 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. CDIGO FUENTE
CDIGO EN SEMFOROS :
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. ARTCULO CIENTFICO
8. APLICACIN REAL
9. BIBLIOGRAFA
Palma mendes , j. t. (2003). programacion concurrente . espaa.
Vallejo Fernadez, D. (2012). programacion concurrente y tiempo real. Espaa:
Edlibrix.