jueves, 6 de febrero de 2014

Regiones críticas condicionales

pthread_cond_destroy(pthread_cond_t *cond);   
int pthread_cond_init(pthread_cond_t *restrict cond, 
                      const pthread_condattr_t *restrict attr);   
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;

int pthread_cond_timedwait(pthread_cond_t *restrict cond,                                    pthread_mutex_t *restrict mutex, 
                           const struct timespec *restrict                                  abstime);   
int pthread_cond_wait(pthread_cond_t *restrict cond,                                   pthread_mutex_t *restrict mutex);   
int pthread_cond_broadcast(pthread_cond_t *cond);  
int pthread_cond_signal(pthread_cond_t *cond)


El funcionamiento es sencillo, una hebra obtiene un mutex, comprueba la condición bajo la protección del mutex y si la condición es cierta la hebra continua su tarea y libera el mutex cuando sea apropiado. Si la condición no es cierta el mutex se libera y la hebra se duerme sobre la variable condición. Cuando se produce un cambio en la condición se deberá producir una llamada que despierte la hebra dormida. por último la hebra despertada vuelve a tomar el mutex y repite el procedimiento mencionado anteriormente.

No hay comentarios:

Publicar un comentario