bool flag=false;
pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond=PTHREAD_COND_INITIALIZER;
void function1()
{
pthread_mutex_lock(&mutex);
while(!flag)
{
//#2
pthread_cond_wait(&cond,&mutex);
}
pthread_mutex_unlock(&mutex);
}
void function2()
{
flag=true;
pthread_cond_signal(&cond);
}
これが状況です。2 つのスレッド (thread1 と thread2) がそれぞれ function1 と function2 で実行されています。
CPU スケジュールのため、スレッド 1 は #2 で停止します。
thread2 が実行を開始し、フラグを true に変更しました。
thread1 は待機を開始しますが、永遠に待機します。
ミューテックスをロックせずに他のスレッドに通知したい場合に、この状況を回避する方法。