Universidad de Costa Rica
Escuela de Ciencias de la Computación e Informática
CI-0122 Sistemas operativos
Ejemplos
|
|
CI0122 /
Ejemplos
|
#define capacidad 15
int clientes = 0;
Semaphore mutex("Mutex", 1);
Semaphore cliente("Semaforo C",0);
Semaphore barbero("Semaforo B",0);
void Cliente(void *p){
// currentThread->Yield();
long num = (long) p;
printf("LLega cliente %ld\n",num);
mutex.P();
if (clientes == capacidad){
mutex.V();
printf("Sala llena, cliente se va sin cortarse el pelo\n");
}
else{ //si no esta llena
printf("Cliente entra\n");
clientes ++; //se sienta
mutex.V();
cliente.V();
barbero.P(); //espera a que barbero se despierte
printf("Cliente %d esta siendo atendido\n", num);
}
}
void Barbero(void *p){
while(true) {
cliente.P(); //revisa si hay clientes, si no se va a dormir
barbero.V(); //barbero se despierta
printf("Barbero atendiendo a cliente \n");
sleep(1);
mutex.P();
clientes--;
mutex.V();
// currentThread->Yield();
}
}
void
ThreadTest()
{
Thread * t1;
t1 = new Thread("Barbero empieza a trabajar\n");
t1->Fork(Barbero,0);
DEBUG('t', "Haciendo clientes\n");
char* threadname = new char[100];
for (long i = 1; i <= 20; i++) {
Thread * t;
sprintf(threadname,"Cliente %ld",i);
t = new Thread(threadname);
t->Fork(Cliente,(void *)i);
}
}