Silphire (7255) の日記

2003 年 03 月 11 日
午前 05:00

pthread日記(56) - pthread_cond_signal()

条件変数でブロックしているスレッドに、ある状態を満たした事を通告します

int pthread_cond_signal(pthread_cond_t *cond);

pthread_cond_signal()は、condが参照する条件変数によってブロックされているスレッドをアンブロックします。

1つ以上のスレッドが条件変数によってブロックされている状況において、どのスレッドをアンブロックするかはスケジューリングポリシーが決定します。pthread_cond_signal()やpthread_cond_broadcast()を実行した事によって、それぞれのスレッドがpthread_cond_wait()やpthread_cont_timedwait()の呼び出しからアンブロックされた時、スレッドはpthread_cond_wait()やpthread_cond_timedwait()を呼び出した時に使ったMutexを所有します。アンブロックされたスレッドは、適切ならばスケジューリングポリシーによって優先権を得て、それぞれpthread_mutex_lock()を呼び出したようになります。

pthread_cond_wait()やpthread_cond_timedwait()を呼んだ事により、条件変数に関連づけられて待っているスレッドは、もしスケジューリングの結果が予測可能である必要があっても、Mutexの所有の如何に関わらずpthread_cond_signal()やpthread_cond_broadcast()を呼ぶかもしれません。その時は、Mutexはpthread_cond_signal()やpthread_cond_broadcast()を呼び出したスレッドによってロックされます。

pthread_cond_signal()やpthread_cond_broadcast()は、condで指定した条件変数をどのスレッドもブロックしていない場合は何もしません。

pthread_cond_signal()が成功した時には0を返します。エラーの時はエラーに応じた値を返します。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

物事のやり方は一つではない -- Perlな人

処理中...