Está en la página 1de 4

PROGRAMACIN CONCURRENTE APLICADA

AL PROBLEMA DE LOS CANBALES Y


MISIONEROS
Gian Carlo Gonzalo Mamani Cdigo: 2013-39104
Carlo Alberto Braez Vargas -Codigo 2013-39###
E.A.P. de Ingeniera en Informtica y Sistemas Facultad de Ingeniera
Universidad Jorge Basadre Grohmann
Tacna-Per
carlos_18_1229 @hotmail.com
cbraez.fitness@gmail.com

Abstract: This scientific article, I am going to
announce, an option for everything that one that
begins in the world of the programming, the
competing programming is one of the biggest options
to the moment to create software and complex
systems, since me to save the consumption of
memory to demonstrate that us it is suitable to use
this type of programming we will focus to solving an
algorithm which is named zthis we will use types of
solutions that will be the semaphores and monitors
and will analyze which is convenient for us to use.
Palabras clavez: programacin concurrente,
semforos, monitores, algoritmo, canbales
y misioneros.
1. INTRODUCCIN

A fines de los aos 50 aparece la programacin
concurrente con el problema de la interrupcin, por
esos tiempos la arquitectura para los ordenadores era
complejo y no tenan en cuenta la comparticin de
datos entre los distintos procesos que podan ser
interrumpidos, con la intencin de continuarlos ms
tarde. Para ello era necesario encontrar soluciones a
los problemas de la programacin concurrentes:
exclusin mutua, condicin de sincronizacin de los
personajes que tuvo gran influencia en la
programacin corriente es E. W. Dijkstra quien
propuso el mecanismo de los semforos y posteriormente
los monitores, estos dos mecanismos sern tratados en los
puntos posteriores aplicndolos a la solucin del algoritmo
de los canbales y misiones.[1]









2. El PROBLEMA: Algoritmo de canbales y
misioneros
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.
Este es un problema tpico al momento de
inicializarse en la programacin concurrente, al
igual que problemas como la cena de los
filsofos, lector y escritor, productor
consumidor, etc. Problemas que nos ponen a
prueba la exclusin mutua, sincronizacin de
datos. Estos problemas son la base para
posteriormente utilizarlos en la creacin de
sistemas operativos y software.

3. SOLUCIONAR LOS PROBLEMAS DE LA
PROGRAMACION CONCURRENTE
Como ya hemos mencionado la programacin
concurrente presenta problemas en su
implementacin y es que por su misma
arquitectura por ello es necesario solucionar los
problemas inherentes: exclusin mutua,
condicin de sincronizacin.
Tenemos dos maneras de resolver el problema
utilizando semforos o monitores cada uno
tiene su ventaja, lo analizaremos de las dos
formas y veremos cual nos he ms eficiente.

3.1. Semforos
Un semforo es una herramienta de
sincronizacin genrica e independiente del
dominio del problema, ideada por Dijsktra en
1965.
Las operaciones de sincronizacin de los
semforos son dos: signal, wait. Y nos resuelve
el problema de exclusin mutua y
sincronizacin.


3.1.1. Operacin wait: Fig. 1Programacin concurrente
Decrementa el valor de una variable si esta es mayor que
cero. Si es igual a 0 el proceso se bloquea en el semforo.

Wait (s):
If s>0 then
s:=s-1;
else
bloquear proceso

3.1.2. Operacin signal: desbloquea algn
proceso bloqueado y e n el caso de
que no haya ninguno incrementa el valor de
la variable
Signal(s);
if (hay procesos bloqueados) then
Desbloquear un proceso
else
S:=s+1;


Pseudocodigo en monitores
Las variables que van a ser necesarias para que
nuestro algoritmo funcione son
olla,m,i enteros
mutex,comer,cocina semforos
olla que nos presenta la cantidad de misioneros
capturados, m la cantidad de misioneros que el
usuario ingresara.

Necesitamos un proceso canbal que representara a
los propios canbales, primero cogern un canbal de
la olla y se lo comern y disminuirn en uno la
cantidad de canbales en la olla, si es que un canbal
quiere ingresar y no hay porciones entonces tendr
que esperar.
comenzar
para un i:1 repetir hasta N
espere mutex
si olla=0
comenzar
desbloquear cocina
espere comer
fin
'Canibal comiendo'
olla=olla-1
desbloquear mutex
fin
El siguiente proceso ser el del cocinero quien
dormir hasta que la olla este vacia y se despertara
cuando esta este vacia.
proceso cocinero
comenzar
repetir
espere cocina
olla=m
'Cocinero llena la olla'
desbloquear comer
para siempre
fin

Esta es la funcin principal que inicializa las
variables que se utilizaran, inicializamos el
semforo mutex=1 para que primero el cocinero
llene la olla y para que luego mutex=0 y asi pasar al
proceso canbal la cual si la olla esa vacia se
bloqueara hasta el cocinero la llene.
comenzar
j=0
inicializar mutex=1
inicializar cocina=0
inicializar comer=0
escribir :Ingrese la cantidad de porciones de la
olla'
leer m
concurrencia
canibal
cocinero
fin
fin

3.2. Monitores
Los monitores son mecanismos de abstraccin
de datos: agrupan o encapsulan las
representaciones de recursos, abstractos y
proporcionan un conjunto de operaciones que
son las nicas que pueden realizar se pueden
realizar cambios sobre dichos recursos. Las
operaciones que se pueden realizar son:
3.2.2. Delay: Suspende el proceso que la ejecuta (que
ha invocado el procedimiento del monitor en
que se encuentra) y lo introduce en la cola
asociada a la variable condition.
delay (variableCondition).
3.2.3. Resume: Ejecutada sobre una variable tipo
Condition, se reactiva uno de los procesos de la
lista asociada a la variables.
resume(variableCondition)
3.2.4. Funcin empty: En algunos problemas resulta
necesario comprobar si la cola de una variable
codition esta vaca o no. para ello se orece la
funcin empty (c) que devuelve un valor
boleano indicando si la cola de la variable
condicin esta vacia o no.

Fig. 2 Modelo de funcionamiento de un semforo
PROGRAMACIN CONCURRENTE APLICADA
AL PROBLEMA DE LOS CANBALES Y
MISIONEROS
Gian Carlo Gonzalo Mamani Cdigo: 2013-39104
Carlo Alberto Braez Vargas -Codigo 2013-39###
E.A.P. de Ingeniera en Informtica y Sistemas Facultad de Ingeniera
Universidad Jorge Basadre Grohmann
Tacna-Per
carlos_18_1229 @hotmail.com
cbraez.fitness@gmail.com





























































Pseudocodigo en monitores
Para este en monitores tendremos que exportar dos
procedimientos:
llenar,comer;
y las variables
misioneros,y:entero ;
olla:condicin ;
el primer procedimiento del monitor sera el de comer
que sera exportado. Primero preguntara si cantidad de
misioneros es mayor que cero, si es asi decrementara
en uno caso contrario se bloqueara y dara paso al otro
procedimiento

procedimiento comer;
comenzar
if misioneros>0 then
comenzar
escribir COMIENDO EL CANIBAL
misioneros:=misioneros-1;
fin
else
retrasar(olla);
fin;

El procedimiento llenar la olla a la cantidad que
ingreso el usuario y si la cantidad de la olla es mayor
que la olla libera a esta.
procedimiento llenar;
comenzar
if misioneros=0 then
comenzar
misioneros:=y;
el cocinero lleno la olla
reanudar(olla);
fin;
fin;

comenzar
misioneros:=0;
ingrese la cantidad de misioneros en la olla
readln(y);
fin;
vamos a crear dos procesos canbal y cocinero que
sern utilizados en la funcin principal
proceso canibal;
comenzar
repetir
canibales.comer;
para siempre
fin;
proceso cocinero;
comenzar
repetir
canibales.llenar;
para siempre
fin;
funcin principal
comenzar
cobegin
canibal;
cocinero;
coend;
fin.
4. APLICACIN DE LA PROGRAMACIN
CONCURRENTE EN LA VIDA REAL
La aplicacin que podemos dar a la
programacin concurrente es muy variada,
especficamente al algoritmo que hemos resuelto
se puede aplicar al igual que el problema de
buffer, si hacemos peticiones a un servidor de
forma concurrente o en un sitio web que est
relacionado a una base datos obtendremos
resultados en nuestro caso ser los canbales,
pero en cierto tiempo las peticiones ya no se
podrn realizar por falta acceso o truncamiento
del servidor.
Tener una visin mas amplia acerca de
problemas clsicos, para as relacionarla con
algunos problemas de vida real y poder aplicar
dichos conocimientos para solucionarlas, ya
sean empresas, organizaciones, instituciones
pblicas, etc.
Aporta una mirada bastante profunda sobre
problemas fundamentales de la computacin, y a
veces, del razonamiento humano.
Simulacin de sistemas dinmicos.


5. CONCLUSIONES
Se logr analizar el algoritmo de los canbales
y comensales tanto con semforos y monitores.
Este algoritmo al igual que el de lector y
escritor tiene una muy buena aplicacin en
campo financiero donde hacen retiros y abonos.
Los monitores son mejores que los semforos
ya que no necesitan que una variable se igual a
cero para bloquearla.


Referencias
Palma Mndez, J.T., Garrido Carrera, M.C.,
Sanchez Figueroa, F., Quesada Arencibia, A.
(2003). Programacin Concurrente. Espaa:
Thomson.
Fernndez, D.V., Morcillo, C.G., Albusac
Jimnez, J.A. (2003). Programacin Concurrente
y Tiempo Real. Espaa: Edlibrix.

También podría gustarte