Visibles a ambas hebras: pthread_mutex_t lock_de_mi_variable = PTHREAD_MUTEX_INITIALIZER; int variable = 0; En una hebra: /* Espera por un valor superior a LIMITE en variable */ : int espere = 1; while (espere) { /*Espera activa u ocupada, indeseable */ pthread_ mutex_lock(&lock_de_mi_variable); if ( variable > LIMITE) /* Alcanzó valor límite?*/ espere=0; pthread_mutex_unlock(&lock_de_mi_variable); } /* hago lo que esperaba cuando variable > LIMITE */ : | En Otra hebra: : pthread_ mutex_lock(&lock_de_mi_variable); variable++; pthread_mutex_unlock(&lock_de_mi_variable); : |
#include <pthread.h> int pthread_cond_init(pthread_cond_t *restrict cond, pthread_condattr_t *restrict attr); int pthread_cond_destroy(pthread_cond_t *restrict cond); Ambas retornan 0 si es OK, y un número de error en caso de falla. |
#include <pthread.h> int pthread_cond_wait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex); int pthread_cond_timewait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex, const struct timespec *restrict timeout); Ambas retornan 0 si es OK, y un número de error en caso de falla. |
Visibles a ambas hebras: pthread_mutex_t lockDeMiVariable = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t cambioDeVariable = PTHREAD_COND_INITIALIZER; int variable = 0; En una hebra: /* Espera por un valor superior a LIMITE en variable para poder proseguir */ : pthread_ mutex_lock(&lockDeMiVariable); while ( variable <= LIMITE ) /* Debo seguir esperando mi condición !*/ pthread_cond_wait(&cambioDeVariable, &lockDeMiVariable); /*espera bloqueada*/ pthread_mutex_unlock(&lockDeMiVariable); /* hago lo que esperaba para variable > LIMITE */ : | En Otra hebra: : pthread_ mutex_lock(&lockDeMiVariable); variable++; pthread_mutex_unlock(&lockDeMiVariable); pthread_cond_signal(&cambioDeVariable); : |
#include <pthread.h> int pthread_cond_signal(pthread_cond_t *restrict cond); int pthread_cond_broadcast(pthread_cond_t *restrict cond); Ambas retornan 0 si es OK, y un número de error en caso de falla. |