Зачем вам нужен цикл while при ожидании переменной условия

Допустим, у вас есть этот код

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 , но в этом случае вы можете просто проверить это с помощью условия if , а не с помощью while .

Я что-то здесь упускаю? Я понимаю pthread_cond_wait так. он просто ждет бесконечно, если cam_video_cond не сигнализируется. Более того, он разблокирует мьютекс cam_video_lock при вызове, но когда условие сигнализируется, перед возвратом он повторно блокирует cam_video_lock . Я прав?

16
задан MetallicPriest 14 October 2011 в 10:17
поделиться