2

让我们看一下下面的代码。假设一个线程看到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);
4

1 回答 1

3

是的。虚假唤醒是一种成功返回,后置条件(重新获得互斥锁)将被满足。

于 2013-09-05T15:08:46.063 回答