Peluquero dormilon

Solo disponible en BuenasTareas
  • Páginas : 3 (703 palabras )
  • Descarga(s) : 0
  • Publicado : 4 de enero de 2012
Leer documento completo
Vista previa del texto
El peluquero dormilón (SOLUCIÓN)


El problema del peluquero dormilón (originalmente, el barbero dormilón) es un clásico de la Programación Concurrente. En él se propone la discusión sobre cómogestionar el ``transito'' por una pequeña peluquería (recurso compartido), por parte de dos tipos de procesos: el peluquero y los clientes. El enunciado sugiere que durante la ejecución lainteracción entre el peluquero y un cliente se puede producir muy a menudo y que, por tanto, deben establecerse los mecanismos de sincronización adecuados para evitar que los dos ``colisionen'' dentro lapeluquería; es decir, asegurar uno sólo es el que se mueve en cada momento.

Etapa 1.
A continuación se presenta una primera solución del problema, describiendo, mediante seudocódigo, la actividad delos procesos.

MODULE PeluqueroDormilon;

CONST
NumClientes = 6;
VAR
I : [1..NumClientes];

TASK Peluquero;
BEGIN
LOOP
>
>
>
END (* LOOP *)
END Peluquero;TASK Cliente;
BEGIN
>
IF NOT > THEN
>
ELSE
>
>
>
END (* IF *)
END Cliente;

BEGIN
COBEGIN
Peluquero;
FORALL I:= 1 TO NumClientes DO
ClienteEND; (* FORALL *)
COEND
END PeluqueroDormilon.

Etapa 2.
Vamos a detectar en la especificación anterior los puntos de sincronización entre los procesos, asociándoles una operación de monitor.MODULE PeluqueroDormilon;

.........................

MONITOR Peluqueria;

PUBLIC
EsperarCliente,
PedirCorteDePelo,
FinalCorteDePelo,
AbrirPuertaEsperarSalida,ClienteSale;

PROCEDURE EsperarCliente;
BEGIN
IF > THEN
>
ELSE
>
END (* IF *)
END EsperarCliente;

PROCEDURE PedirCorteDePelo (VAR meAtienden : BOOLEAN);
BEGIN
meAtienden := TRUE;IF > AND
NOT > THEN
meAtienden := FALSE
ELSIF > THEN
>
ELSE
>
END (* IF *)
END PedirCorteDePelo;

PROCEDURE FinalCorteDePelo;
BEGIN
>
END FinalCorteDePelo;...
tracking img