Чтобы процитировать страницу руководства:
При использовании переменных условий всегда существует логический предикат, включающий общие переменные, связанные с каждым условием ожидания, который является истинным, если поток должен продолжаться. Могут возникнуть побочные пробуждения из функций pthread_cond_timedwait() или pthread_cond_wait(). Поскольку возврат из pthread_cond_timedwait() или pthread_cond_wait() не означает ничего о значении этого предиката, предикат должен быть переоценен при таком возврате.
Итак, pthread_cond_wait
может вернуться, даже если вы его не указали. На первый взгляд, по крайней мере, это кажется довольно жестоким. Это было бы похоже на функцию, которая случайно возвращала неправильное значение или случайно возвращалась до того, как она действительно достигла правильного оператора return. Это похоже на серьезную ошибку. Но тот факт, что они решили записать это на странице руководства, а не исправить, как представляется, указывает на то, что существует законная причина, по которой pthread_cond_wait
заканчивается просыпаясь ложно. Предположительно, есть что-то внутреннее о том, как это работает, что делает его таким, что это невозможно. Вопрос в том, что.
Почему pthread_cond_wait
возвращает ложно? Почему он не может гарантировать, что он только проснется, когда он будет правильно сигнализирован? Может ли кто-нибудь объяснить причину своего ложного поведения?