Скажем, у вас есть этот код
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 ?Хорошо, я знаю, что у вас может быть случай, когда cam-> status не равен WAIT_DISPAY , когда вызывается pthread_cond_wait , но в этом случае вы можете просто проверитьэто через если условие вместо использования в то время как .
Я что-то здесь упускаю?Насколько я понимаю, pthread_cond_wait заключается в том, что он просто ждет бесконечности, если cam_video_cond не сигнализируется.Кроме того, он разблокирует мьютекс cam_video_lock при вызове, но когда сигнализируется условие, перед возвратом он блокирует cam_video_lock .Я прав?