gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:23:22 29 4
gpt4 key购买 nike

假设你有这段代码

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。我说得对吗?

最佳答案

It is recommended that all threads check the condition after returning from pthread_cond_wait because there are several reasons the condition might not be true. One of these reasons is a spurious wakeup; that is, a thread might get woken up even though no thread signalled the condition.

来源:Spurious wakeup

关于c - 为什么在等待条件变量时需要 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7766057/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com