一般的に言えば、以下のようpthread_cond_wait()にpthread_cond_signal()呼ばれます。
//thread 1:
pthread_mutex_lock(&mutex);
pthread_cond_wait(&cond, &mutex);
do_something()
pthread_mutex_unlock(&mutex);
//thread 2:
pthread_mutex_lock(&mutex);
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
手順は次のとおりです。
pthread_cond_wait(&cond, &mutex);が呼び出され、ミューテックスのロックを解除しますスレッド 2 はミューテックスをロックし、ミューテックスの
pthread_cond_signal()ロックを解除する を呼び出します。スレッド 1 で
pthread_cond_wait()呼び出され、ミューテックスを再度ロックします。
スレッド 2 では、pthread_cond_signal()呼び出された後、 pthread_mutex_unlock(&mutex)実行しようとしていますが、現在スレッド 1 によってロックされているミューテックスのロックを解除したいようです。私の理解に問題はありますか?
pthread_cond_wait()また、同じ cond-mutex ペアに対して 1 つのスレッドからしか呼び出せないようにも思えます。しかし、「pthread_cond_signal() 関数は、指定された条件変数 cond でブロックされているスレッドの少なくとも 1 つのブロックを解除する必要があります (cond でブロックされているスレッドがある場合)」という格言があります。つまり、pthread_cond_wait()同じ cond-mutex ペアに対して多くのスレッドから呼び出すことができるということですか?