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);
}