Manual de usuario Practica 3 Barbero Dormilon

Anuncio
Manual de
usuario
Practica 3
Barbero
Dormilon
I N T R O D U C C I ÓN .
El propósito de esta aplicación, es el de mostrar el funcionamiento de un
algoritmos de administración de procesos. El algoritmo de Barbero Dormilon,
combinado con colas de espera
FUNCIONALIDAD:
Este simulador produce el problema del barbero durmiente, es un problema de
sincronización. El problema consiste en una barbería en la que trabaja un barbero que tiene
un único sillón de barbero y varias sillas para esperar. Cuando no hay clientes, el barbero se
sienta en una silla y se duerme. Cuando llega un nuevo cliente, éste o bien despierta al
barbero o —si el barbero está afeitando a otro cliente— se sienta en una silla (o se va si
todas las sillas están ocupadas por clientes esperando). El problema consiste en realizar la
actividad del barbero sin que ocurran condiciones de carrera. La solución implica el uso de
semáforos y objetos de exclusión mutua para proteger la sección crítica.
INTERFAZ:
La aplicación posee varios elementos de control, los cuales sirven para que
el usuario pueda interactuar con ella, el usuario tiene interaccion unicamente
con un boton de la GUI y lo demás
MODO DE USO:
Para iniciar la simulación:
1. Haga click en iniciar simulacion
2. Disfrute de la simulacion
Manual
tecnico
Practica 3
Barbero
Dormilon
Para llevar a cabo la solución del problema, se utilizó la lógica del
algoritmo Barbero/Dormilon.
Cada clase y métodos utilizados para la implementación de la solución,
están incluidos en el código fuente, en dado caso una consulta sea requerida,
además, el código se encuentra correctamente documentado. El algoritmo
utilizado fue el siguiente
Program Productor_y_consumidor;
var critica,vacios,llenos:Semaforo;
Se necesita: + semaforo Cliente = 0
+ semaforo Barbero = 0
+ semaforo SillasAccesibles = 1 //MUTEX
+ int SillasLibres = N //nro total de sillas
• Función barbero (Proceso/hilo­thread): while(true) { //ciclo infinito
P(Cliente) //si no tiene cliente se duerme
P(SillasAccesibles) //ya está despierto y quiere modificar el nro de sillas SillasLibres++ //queda disponible una silla
V(Barbero) // el Barbero está listo para cortar
V(SillasAccesibles) //no se necesitan bloquear las sillas
//el barbero corta el pelo, zona de código no crítico
}
• Función cliente (Proceso/hilo­thread): P(SillasAccesibles) //trata de acceder a una silla
if ( SillasLibres > 0 ) { //si hay sillas libres
SillasLibres ­­ //se sienta en una
V(Cliente) //avisa al barbero, el cual está esperando, que haya un cliente
V(SillasAccesibles) // no se necesitan bloquear las sillas
P(Barbero) // ahora le toca al cliente, pero espera si el barbero está ocupado
//se le está cortando el pelo al cliente
} else { // no hay sillas libres
V(SillasAccesibles) //libero el bloqueo de las sillas
//se va de la barbería
}
Descargar