Предполагается, что у меня есть программа на C с 3 потоками POSIX, совместно использующая глобальную переменную, мьютекс и переменную условия, два из которых выполняют следующий psuedocode:
...process data...
pthread_mutex_lock( &mutex );
variable = data_ptr;
pthread_cond_signal( &cond );
pthread_mutex_unlock( &mutex );
И третий ход:
while(1) {
while( variable == NULL ) {
pthread_mutex_wait( &cond, &mutex );
}
printf( "Data is %d", *variable );
}
Можно ли предположить, что третий поток будет видеть данные каждого из первых двух?
Иными словами, если поток обращается к мьютексу и условной переменной, можно ли с уверенностью предположить, что он будет следующим, кто получит блокировку, если он будет сигнализирован, а не какой-то другой поток, ждешь на замок?