C 为什么在等待条件变量时需要while循环
假设你有这个密码C 为什么在等待条件变量时需要while循环,c,linux,pthreads,signals,C,Linux,Pthreads,Signals,假设你有这个密码 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->vi
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);
pthread\u mutex\u lock(&cam->video\u lock);
while(cam->status==等待显示)//video\u cond,&cam->video\u lock);
pthread_mutex_unlock(&cam->video_lock);
我的问题是,为什么在这里需要一个while循环。难道不pthread_cond_wait只是等待,直到信号线程发出信号cam_video_cond?好的,我知道当调用pthread\u cond\u WAIT时,cam->status可能不等于WAIT\u DISPAY,但是在这种情况下,您可以通过if条件检查它,而不是在期间使用
我是不是遗漏了什么?我对pthread_cond_wait的理解是,如果没有发出信号,它只会等待无限。此外,当调用时,它会解锁cam\u video\u lock互斥锁,但当条件发出信号时,在返回之前,它会重新锁定cam\u video\u lock。我说得对吗?出于性能原因,POSIX API允许操作系统唤醒线程,即使条件尚未满足(这称为a) 建议所有线程在返回后检查状况 frompthread\u cond\u wait,原因有多种 可能不是真的。其中一个原因是虚假的觉醒;就是, 线程可能会被唤醒,即使没有线程向 条件
来源:虚假唤醒是一个原因,但合法但无关的唤醒是另一个原因 考虑: