说你有这个代码
pthread_mutex_lock(&cam->video_lock); while(cam->status == WAIT_DISPLAY) // <-- Why is this a 'while' and not an 'if'? pthread_cond_wait(&cam->video_cond, &cam->video_lock); pthread_mutex_unlock(&cam->video_lock);
我的问题是,为什么您需要在此处进行while循环。 pthread_cond_wait* 不会只等到信号线程发出 cam_video_cond 信号吗?好的,我知道您可能会遇到以下情况:调用 pthread_cond_wait 时 cam- > status不等于 WAIT_DISPAY ,但是在那种情况下,您可以通过 if 条件检查它,而不是使用 while 。 *
我在这里想念什么吗?我对 pthread_cond_wait的 理解是,如果未发出 cam_video_cond 信号,它将仅等待无限。此外,它在被调用时会解锁 cam_video_lock 互斥锁,但是当发出条件信号时,它将在返回之前重新锁定 cam_video_lock 。我对吗?
建议所有线程从 pthread_cond_wait 返回后检查条件,因为有多种原因可能导致条件不成立。这些原因之一是虚假唤醒。也就是说,即使没有线程发出信号通知该情况,线程也可能被唤醒。