为什么在等待条件变量时需要while循环

说你有这个代码

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循环

信号吗?好的,我知道您可能会遇到以下情况:调用 时 不等于

,但是在那种情况下,您可以通过 条件检查它,而不是使用 。 *

我在这里想念什么吗?我对 理解是,如果未发出

信号,它将仅等待无限。此外,它在被调用时会解锁 互斥锁,但是当发出条件信号时,它将在返回之前重新锁定

。我对吗?

回答:

建议所有线程从

返回后检查条件,因为有多种原因可能导致条件不成立。这些原因之一是虚假唤醒。也就是说,即使没有线程发出信号通知该情况,线程也可能被唤醒。

以上是 为什么在等待条件变量时需要while循环 的全部内容, 来源链接: utcz.com/qa/428132.html

回到顶部