pthread_cond_signal(3THR) は、cv が指す条件変数でブロックされている 1 つのスレッドのブロックを解除します (Solaris スレッドについては、cond_signal(3THR)を参照)。
プロトタイプ: int pthread_cond_signal(pthread_cond_t *cv); |
#include <pthread.h> pthread_cond_t cv; int ret; /* 条件変数がシグナルを送る */ ret = pthread_cond_signal(&cv); |
pthread_cond_signal() は、シグナルを送ろうとしている条件変数で使用されたものと同じ mutex ロックを獲得した状態で呼び出してください。そうしないと、関連する条件変数が評価されてから pthread_cond_wait() でブロック状態に入るまでの間に条件変数にシグナルが送られる可能性があり、その場合 pthread_cond_wait() は永久に待ち続けることになります。
スケジューリング方針は、ブロックされたスレッドがどのように呼び起こされるかを決定します。SCHED_OTHER の場合、スレッドは優先順位に従って呼び起こされます。
スレッドがブロックされていない条件変数に対して pthread_cond_signal() を実行しても無視されます。
正常終了時は 0 です。それ以外の戻り値は、エラーが発生したことを示します。以下の条件が検出されると、この関数は失敗し、次の値を返します。
例 4–8 に、pthread_cond_wait () と pthread_cond_signal() の使用方法を示します。