Problema del barbero con canales

Anuncio
Problema de sistemas operativos
Problema 1: El barbero.
Queremos simular el funcionamiento de una barbería. En dicha barbería tenemos dos barberos (cada uno
con su sillón de barbero) y una sala de espera para un máximo de 5 clientes.
Un barbero está habitualmente dormido hasta que tiene un cliente al que pelar. En dicho momento, el
barbero pela al cliente hasta que termina su trabajo. A continuación el barbero puede pasar o bien a pelar a
otro cliente o bien a dormir de nuevo a la espera de otro cliente.
Un cliente se asoma a la barbería y, si ve la sala de espera llena, se va por donde ha venido. Si hay
algún barbero libre, el cliente se sienta en la silla del barbero para que lo pele. Si ambos barberos están ocupados, el cliente se sienta en la sala de espera hasta que le toque.
Se pide implementar en C en Plan 9, empleando como único mecanismo de sincronización los
canales de la librería de threads, un simulador para este problema.
El código de un cliente debe incluir los siguientes mensajes:
void cliente(...)
{
...
print("me voy de la barberia. esta llena.\n");
...
print("me siento en la sala de espera\n");
...
print("me pelo\n");
...
print("termino de pelarme\n");
...
}
El código de un barbero debe incluir los siguientes mensaje:
void barbero(...)
{
...
print("me duermo esperando clientes\n");
...
print("empiezo a pelar\n");
...
print("termino de pelar\n);
...
}
No se permite utilizar buffering en los canales ni se permite utilizar CHANNOP.
Descargar