hola me gustaría generar varios hilos gestionados por uno maestro... para ello de momento he creado estas dos funciones para hilos:
void * hilo(void* param){
while(1){
pthread_mutex_lock(&mutexSinc[int(param)]);
pthread_cond_wait(&conds[int(param)],&mutexSinc[int(param)]);
sleep(1);
tareas[int(param)]->cargaActual++;
cout<<"soy el hilo: "<<int(param) <<" tengo carga:"<<tareas.at(int(param))->carga <<endl;
pthread_mutex_unlock(&mutexSinc[int(param)]);
pthread_mutex_lock(&mutexSinc2[int(param)]);
pthread_cond_signal(&conds2[int(param)] );
pthread_mutex_unlock(&mutexSinc2[int(param)]);
}
}
void activarHilo(int h){
pthread_mutex_lock(&mutexSinc[int(h)]);
pthread_cond_signal(&conds[h] );
pthread_mutex_unlock(&mutexSinc[int(h)]);
pthread_mutex_lock(&mutexSinc2[h]);
pthread_cond_wait(&conds2[h],&mutexSinc2[h]);
pthread_mutex_unlock(&mutexSinc2[h]);
}
void * hiloGestor(void* param){
activarHilo(0);
activarHilo(0);
activarHilo(0);
activarHilo(0);
activarHilo(0);
activarHilo(0);
// for (int i=nTareas;i>=0;i--){
// activarHilo(i);
// }
// for(int i=nTareas;i>=0;i--){
// activarHilo(i);
// }
}
por alguna razón activar hilo no funciona como yo quiero... quiero que active el hilo ejecute el sleep y después devuelva el control a hilo. Todas las variables estan inicializadas y todo.
¿alguien puede ayudarme? Es para un proyecto que tengo que entregar en una asignatura en diez días!
Gracias!!!
void * hilo(void* param){
while(1){
pthread_mutex_lock(&mutexSinc[int(param)]);
pthread_cond_wait(&conds[int(param)],&mutexSinc[int(param)]);
sleep(1);
tareas[int(param)]->cargaActual++;
cout<<"soy el hilo: "<<int(param) <<" tengo carga:"<<tareas.at(int(param))->carga <<endl;
pthread_mutex_unlock(&mutexSinc[int(param)]);
pthread_mutex_lock(&mutexSinc2[int(param)]);
pthread_cond_signal(&conds2[int(param)] );
pthread_mutex_unlock(&mutexSinc2[int(param)]);
}
}
void activarHilo(int h){
pthread_mutex_lock(&mutexSinc[int(h)]);
pthread_cond_signal(&conds[h] );
pthread_mutex_unlock(&mutexSinc[int(h)]);
pthread_mutex_lock(&mutexSinc2[h]);
pthread_cond_wait(&conds2[h],&mutexSinc2[h]);
pthread_mutex_unlock(&mutexSinc2[h]);
}
void * hiloGestor(void* param){
activarHilo(0);
activarHilo(0);
activarHilo(0);
activarHilo(0);
activarHilo(0);
activarHilo(0);
// for (int i=nTareas;i>=0;i--){
// activarHilo(i);
// }
// for(int i=nTareas;i>=0;i--){
// activarHilo(i);
// }
}
por alguna razón activar hilo no funciona como yo quiero... quiero que active el hilo ejecute el sleep y después devuelva el control a hilo. Todas las variables estan inicializadas y todo.
¿alguien puede ayudarme? Es para un proyecto que tengo que entregar en una asignatura en diez días!
Gracias!!!