Multithreading 一个线程在虚假唤醒时持有相应的互斥锁吗?

Multithreading 一个线程在虚假唤醒时持有相应的互斥锁吗?,multithreading,parallel-processing,synchronization,pthreads,Multithreading,Parallel Processing,Synchronization,Pthreads,让我们看看下面的代码。 假设一个线程看到ready=false,因此等待条件变量*mv\u cv*,从而释放互斥锁*my\u mutex*并将其自身置于睡眠状态。 一段时间后,当ready仍然保持值false时,某个东西错误地唤醒了线程。我的问题是: 线程现在是否通过在醒来前重新获取互斥体来持有互斥体*my_mutex* pthread_mutex_lock(&my_mutex); while ( !ready ) { pthread_cond_wait(&my

让我们看看下面的代码。 假设一个线程看到ready=false,因此等待条件变量*mv\u cv*,从而释放互斥锁*my\u 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);

对。虚假唤醒是一种成功返回,并且将满足post条件(重新获取互斥锁)。

Heh“虚假唤醒是一种成功返回”。我理解你的意思,但这听起来仍然像是文件系统文档中的警告:“注意——有时可能会打开错误的文件”。