Powiedzmy, że masz ten kodDlaczego potrzebujemy pętli while czekając na stan zmiennej
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);
Moje pytanie brzmi, dlaczego trzeba pętli while tutaj. Czy nie czekałoby pthread_cond_wait, aż wątek sygnalizacyjny sygnalizuje cam_video_cond? OK, wiem, że możesz mieć sprawę gdzie cam-> Stan nie jest równa WAIT_DISPAY gdy pthread_cond_wait nazywa, ale w tym przypadku można po prostu sprawdzić go przez jeżeli stanie zamiast używać chwilę.
Czy tu czegoś brakuje? Moje rozumienie pthread_cond_wait jest to, że po prostu czeka na nieskończony, jeśli cam_video_cond nie jest sygnalizowane. Co więcej, odblokowuje on mutex cam_video_lock po wywołaniu, ale gdy stan jest sygnalizowany, przed powrotem zwraca się do cam_video_lock. Czy mam rację?
To samo pytanie tutaj, http://www.unix.com/programming/149791-warunki-warunkowe.html – MetallicPriest
[Fałszywe pobudki] (http://en.wikipedia.org/wiki/Spurious_wakeup) –