假设我有一个具有 3 个 POSIX 线程的 C 程序,共享一个全局变量、互斥体和条件变量,其中两个正在执行以下伪代码:
...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 );
}
假设第三个线程将看到前两个线程的数据是否安全?
换一种说法,如果一个线程正在等待一个互斥锁和一个条件变量,是否可以安全地假设如果发出信号,它将是下一个获得锁的线程,而不是可能正在等待的其他线程锁?