gracias de antemano.
espero su ayuda.
explico un poco mi codigo, hace uso de un semaforo y debo hacer que el numero de barberos pueda ser mas d uno , 2, 3,4 ....N. y que siga funcionando.
Código:
semaphore peluqueros=1;
int cantClientes=0;
int clientesAtendidos=0;
int cantSillas=5; //puede ser la cantidad de sillas que deseemos en la barberia
int cantSillasOcupadas=0;
int tiempoDeLlegada=0;
int tiempoDeAtencion=0;
void recorre(int cliente){
int j;
for(j=1;j<=cantSillasOcupadas;j++){
cout<<"el cliente de la silla"<<j+1<<" pasa a la silla " <<j<<endl;
}
}
void peluquero(){
int p;
if(tiempoDeAtencion==0){
if(cantSillasOcupadas>0){
wait(peluqueros);
clientesAtendidos=clientesAtendidos+1;
cantSillasOcupadas=cantSillasOcupadas-1;
tiempoDeAtencion=random(50);
if(cantClientes==1){
cout<<"+-------------------------------------------------------------------+"<<endl;
cout<<"| |"<<endl;
cout<<" el "<<clientesAtendidos<<" º cliente"<<" esta despertando al peluquero"<<endl;
cout<<" el "<<clientesAtendidos<<" º cliente"<<" pasa a ser atendido"<<endl;
cout<<" se esta atendiendo al " <<clientesAtendidos<<" º cliente"<<"\n"<<endl;
cout<<"| |"<<endl;
cout<<"+-------------------------------------------------------------------+"<<endl;
}else{
cout<<"+-------------------------------------------------------------------+"<<endl;
cout<<"| |"<<endl;
cout<<" el "<<clientesAtendidos<<" º cliente"<<"pasa a ser atendido"<<endl;
cout<<" se esta atendiendo al " <<clientesAtendidos<<" º cliente"<<"\n"<<endl;
cout<<"| |"<<endl;
cout<<"+-------------------------------------------------------------------+"<<endl;
recorre(clientesAtendidos);
}
signal(peluqueros);
}else{
cout<<"-----------------<PELUQUERO DURMIENDO>-------------------"<<"\n"<<endl;
}
}else{
for(p=0;p<tiempoDeAtencion;p++){
tiempoDeAtencion=tiempoDeAtencion-1;
if(tiempoDeAtencion==0){
cout<<"******************************************************"<<endl;
cout<<" se termino de atender al "<<clientesAtendidos<<"º cliente"<<endl;
cout<<"******************************************************"<<endl;
peluquero();
}
}
}
}
void ensillar(int cliente){
int k;
if(cantSillasOcupadas<cantSillas){
cantSillasOcupadas=cantSillasOcupadas+1;
cout<<" el "<<cliente<<" º cliente"<<" se sento en la "<<cantSillasOcupadas<<" º silla"<<endl;
cout<<"| |"<<endl;
cout<<"+--------------------------------------------+"<<endl;
if(cantClientes==1){
peluquero();
}
}else{
cout<<" el "<<cliente<<" º cliente"<<" se fue "<<endl;
cout<<"| |"<<endl;
cout<<"+--------------------------------------------+"<<endl;
}
}
void llega(int cliente){
int i;
int j;
if(cantSillas>0){
tiempoDeLlegada=random(100);
for(j=0;j<tiempoDeLlegada;j++){}
for(i=1;i<=cliente;i++){
cantClientes=cantClientes+1;
cout<<"+--------------------------------------------+"<<endl;
cout<<"| |"<<endl;
cout<<" llego el "<<cantClientes<<" º cliente "<<endl;
ensillar(cantClientes);
}
}
}
void main(){
cobegin{
while(1){
peluquero();
llega(1);
}
}
}