2

让我们来看看下面的代码。 假设一个线程看到准备好 = false,因此等待条件变量* mv_cv *,因此释放互斥量* my_mutex *并将自己置于睡眠状态。 一段时间后,虚假地将线程唤醒,而准备好仍然保留值为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); 

回答

3

是的。虚假唤醒是一种成功的回报,并且后置条件(重新获得互斥锁)将得以实现。

+0

贺'虚假的唤醒是一种成功的回报'。我明白你在说什么,但它仍然听起来像是在文件系统文档中的警告:“注 - 可能偶尔打开错误的文件。 –