Digamos que tiene el código¿Por qué necesita un bucle while a la espera de una variable de condición
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);
Mi pregunta es, ¿por qué necesita un bucle while aquí. ¿No pthread_cond_wait simplemente espere hasta que el hilo de señalización indique cam_video_cond? OK, sé que podría tener un caso en el que cam-> Estado no es igual a WAIT_DISPAY cuando pthread_cond_wait se llama, pero en ese caso sólo podría comprobar a través de una condición si en lugar de utilizar mientras .
¿Falta algo aquí? Mi comprensión de pthread_cond_wait es que solo espera infinito si cam_video_cond no se señaliza. Además, desbloquea el mutex cam_video_lock cuando se llama, pero cuando se señala la condición, antes de volver, se vuelve a bloquear cam_video_lock. ¿Estoy en lo cierto?
La misma pregunta aquí, http://www.unix.com/programming/149791-condition-variables.html – MetallicPriest
[Despertar falso] (http://en.wikipedia.org/wiki/Spurious_wakeup) –