Diciamo che avete questo codicePerché avete bisogno di un ciclo while in attesa di una condizione variabile
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);
La mia domanda è, perché avete bisogno di un ciclo while qui. pthread_cond_wait non attendere fino a quando il segnale di segnalazione segnala cam_video_cond? OK, so che si potrebbe avere un caso in cui camme> Stato non è uguale a WAIT_DISPAY quando pthread_cond_wait si chiama, ma in quel caso si può solo controllare attraverso una condizione se piuttosto che utilizzare mentre.
Mi manca qualcosa qui? La mia comprensione di pthread_cond_wait è che attende infinito se cam_video_cond non è segnalato. Inoltre, sblocca il mutex cam_video_lock quando viene chiamato, ma quando viene segnalata la condizione, prima di tornare, si blocca cam_video_lock. Ho ragione?
La stessa domanda qui, http://www.unix.com/programming/149791-condition-variables.html – MetallicPriest
[Sveglia spuria] (http://en.wikipedia.org/wiki/Spurious_wakeup) –