Angenommen, ich habe ein C-Programm mit 3 POSIX-Threads, die sich eine globale Variable, einen Mutex und eine Bedingungsvariable teilen, von denen zwei den folgenden Psuedocode ausführen:
...process data...
pthread_mutex_lock( &mutex );
variable = data_ptr;
pthread_cond_signal( &cond );
pthread_mutex_unlock( &mutex );
Und das dritte Rennen:
while(1) {
while( variable == NULL ) {
pthread_mutex_wait( &cond, &mutex );
}
printf( "Data is %d", *variable );
}
Kann man davon ausgehen, dass der dritte Thread die Daten aus den ersten beiden Threads sehen wird?
Anders ausgedrückt: Wenn ein Thread auf einen Mutex und eine Bedingungsvariable wartet, kann man dann davon ausgehen, dass er der nächste ist, der die Sperre erhält, wenn sie signalisiert wird, und nicht ein anderer Thread, der möglicherweise auf die Sperre wartet?