让我们看一下下面的代码。 假设一个线程看到ready=false,因此等待条件变量*mv_cv*,从而释放互斥体*my_mutex*并使自身进入休眠状态。 一段时间后,某些东西会虚假地唤醒线程,而 ready 仍保留值 false。我的问题是: 线程现在是否通过在唤醒之前重新获取互斥锁来持有互斥锁 *my_mutex*?
pthread_mutex_lock(&my_mutex);
while ( !ready )
{
pthread_cond_wait(&my_cv, &my_mutex);
}
//some operation goes here
pthread_mutex_unlock(&my_mutex);
最佳答案
是的。虚假唤醒是成功返回的一种,并且后置条件(重新获取互斥锁)将得到满足。
关于multithreading - 线程是否在虚假唤醒时持有相应的互斥体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18638958/