标题基本上不言自明。休眠5秒并解锁互斥锁后,它终于从pthread_cond_wait返回。好像pthread_cond_wait知道自己拿不到互斥量,所以一直等,解锁互斥量后,pthread_cond_wait拿到互斥量,然后继续。。是这样吗?
#include <pthread.h>
pthread_mutex_t alarm_mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t alarm_cond = PTHREAD_COND_INITIALIZER;
int s_i = 0;
void* alarm_thread ( void* arg )
{
pthread_mutex_lock ( &alarm_mutex );
while ( 1 )
{
while ( s_i == 1 )
{
pthread_cond_wait ( &alarm_cond, &alarm_mutex );
printf("I am here");
}
}
}
int main ( int argc, char* argv[] )
{
pthread_t thread;
pthread_create ( &thread, NULL, alarm_thread, NULL );
pthread_mutex_lock ( &alarm_mutex );
s_i = 1;
pthread_cond_broadcast ( &alarm_cond );
sleep ( 5 );
pthread_mutex_unlock ( &alarm_mutex );
}
最佳答案
pthread_cond_wait
函数在等待时释放互斥锁,然后返回并再次获取互斥锁。如果另一个线程持有互斥量,则该线程在释放互斥量之前无法恢复执行。如果这对您造成问题,则说明您使用的条件变量不正确。
互斥量需要在线程等待时释放,否则其他线程无法获取。在返回之前需要重新获取互斥量——如果没有其他原因,允许线程检查是否需要再次调用 pthread_cond_wait
。
关于c++ - 为什么在调用 pthread_cond_broadcast 后调用 pthread_cond_wait 不立即返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13975016/