グローバル変数、ミューテックス、条件変数を共有する 3 つの POSIX スレッドを持つ C プログラムがあり、そのうちの 2 つが次の疑似コードを実行しているとします。
...process data...
pthread_mutex_lock( &mutex );
variable = data_ptr;
pthread_cond_signal( &cond );
pthread_mutex_unlock( &mutex );
そして3回目の実行:
while(1) {
while( variable == NULL ) {
pthread_mutex_wait( &cond, &mutex );
}
printf( "Data is %d", *variable );
}
3 番目のスレッドが最初の 2 つのスレッドのそれぞれからのデータを見ると仮定しても安全でしょうか?
別の言い方をすれば、スレッドがミューテックスと条件変数を待機している場合、ロックを待機している可能性のある他のスレッドではなく、シグナルが送信された場合にロックを取得する次のスレッドであると想定しても安全ですか?ロック?