Syncronizing Threads
int foo = 0; pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; void foo_ready() { pthread_mutex_lock(&mutex); while (foo != 1) { pthread_mutex_unlock(&mutex); sleep(1); pthread_mutex_lock(&mutex); } pthread_mutex_unlock(&mutex); } void foo_initializer() { pthread_mutex_lock(&mutex); if (foo == 0) foo = 1; /* This must only be done once. */ pthread_mutex_unlock(&mutex); }The thread needs to wait until the state of a shared variable changes, but either the thread spends too much time checking or isn't responsive enough.
int pthread_cond_init(pthread_cond_t * cond, pthread_condattr_t *attr);
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
int pthread_cond_destroy(pthread_cond_t * cond);
int pthread_cond_wait(pthread_cond_t * cond, pthread_mutex_t * mutex)
int pthread_cond_timedwait(pthread_cond_t * cond, pthread_mutex_t * mutex, const struct timespec *abstime)
int pthread_cond_signal(pthread_mutex_t * cond)
int pthread_cond_broadcast(pthread_mutex_t * cond)
int foo = 0; pthread_cond_t cond = PTHREAD_COND_INITIALIZER; pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; void foo_ready() { pthread_mutex_lock(&mutex); while (foo != 1) { pthread_cond_wait(&cond, &mutex); } pthread_mutex_unlock(&mutex); } void foo_initializer() { pthread_mutex_lock(&mutex); if (foo == 0) foo = 1; /* This must only be done once. */ pthread_cond_broadcast(&cond); pthread_mutex_unlock(&mutex); }