Professional Documents
Culture Documents
En esta guía de laboratorio se expondrá las primitivas de sincronización conocidas como monitores.
Queremos garantizar que el consumidor no coja los datos más rápido que les está produciendo el
productor. Más concreto: (Formella, 2001)
Como la exclusión mutua está implícita en los monitores no es necesario un esfuerzo extra para proteger la
región crítica. En otras palabras, esta variante funciona con cualquier cantidad de productores y
consumidores sin otra modificación. Es relevante el hecho de que el uso de monitores hace muchos menos
probable la aparición de conflictos que cuando se usan semáforos.
La solución del problema del productor consumidor por medio de monitores es mucho más sencilla que en
el caso de semáforos y regiones críticas. Además, todo el código correspondiente al buffer compartido
queda localizado dentro del monitor, por lo que podemos cambiar su implementación sin al código de
sincronización del productor y consumidor. (Palma Méndez, 2006)
V. PROCEDIMIENTO
EJEMPLO 1:
Programe el problema del productor/consumidor en base al trozo de código fuente que está a continuación
(extraído de los apuntes de las sesiones teóricas).
monitor buffer;
export inserta, extrae;
const N=10;
var ne: integer {número de elementos de la cola en un momento dado}
frente, final: integer;
clleno, cvacio: condition;
cola: array[0..N-1] of integer;
Página 1 de 3
UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERÍA
ESCUELA PROFESIONAL DE INGENIERÍA EN INFORMÁTICA Y SISTEMAS
CURSO: ALGORITMOS Y PROGRAMACIÓN PARALELA
CICLO DE ESTUDIOS: CUARTO | SEMESTRE ACADÉMICO: 2018 - II
function extrae:integer;
begin
if ne=0 then
delay(cvacio);
extrae:=cola[frente];
frente:=(frente+1)mod N;
ne:=ne-1;
resume(clleno);
end;
begin
frente:=0;
final:=0;
ne:=0;
end;
buffer.inserta(elemento);
elemento:=buffer.extrae;
EJEMPLO 2:
Transcriba el siguiente código fuente y haga la interpretación de cómo funciona cada procedimiento y como
resuelve el problema del productor/consumidor
program ProdCons2;
monitor canal;
Página 2 de 3
UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERÍA
ESCUELA PROFESIONAL DE INGENIERÍA EN INFORMÁTICA Y SISTEMAS
CURSO: ALGORITMOS Y PROGRAMACIÓN PARALELA
CICLO DE ESTUDIOS: CUARTO | SEMESTRE ACADÉMICO: 2018 - II
begin
leido := true ;
end;
process productor;
var m: integer;
begin
repeat
m:=random(20) ;
canal.escribe(m) ;
forever
end ;
process consumidor;
var m: integer;
begin
repeat
canal.lee(m);
writeln(m);
forever
end;
begin
cobegin
productor; consumidor;
coend ;
end.
VII. BIBLIOGRAFÍA
Ari B. (1982). Principles of Concurrent Programming. First edition. USA: Prentice-Hall International.
Galli, R. (2015). Principios y algoritmos de concurrencia. España: Create Space.
Morera Pascual, J. M. (2002). Conceptos de sistemas operativos. España: Amábar.
Palma J., Garrido M., Sánchez F. & Quesada A. (2006). Programación Concurrente. Primera edición.
España: Paraninfo
Tanenbaum A. (2003). Sistemas Operativos Modernos. Segunda Edición. México: Prentice Hall
Página 3 de 3