pthread_cond_wait
ではmutexロック掛けてそれを引数にしなければならない.
そしてその同一のmutex変数を使って対になるpthread_cond_signal
でもロックを掛ける必要がある.
こんな感じ.
#include <pthread.h> #include <stdio.h> pthread_mutex_t mutex; pthread_cond_t cond; void *thread_A(void *arg) { pthread_mutex_lock(&mutex); pthread_cond_wait(&cond, &mutex); pthread_mutex_unlock(&mutex); } void *thread_B(void *arg) { pthread_mutex_lock(&mutex); pthread_cond_signal(&cond); pthread_mutex_unlock(&mutex); }
なぜmutexを引数にとるのかというと, 条件変数condにpthread_cond_waitとpthread_cond_signalの両方がアクセスするので,その同期をとるためである. 詳しくはここを見る.