Я использую helgrind для проверки данных в моей программе. Helgrind сообщает о 222 ошибках, все они:
Thread #21: Bug in libpthread: pthread_cond_wait succeeded without prior pthread_cond_post
Я не смог найти ничего об этом сообщении об ошибке в Google. В исходном коде valgrind это, кажется, происходит здесь:
if (!timeout && !libhb_so_everSent(cvi->so)) {
/* Hmm. How can a wait on 'cond' succeed if nobody signalled
it? If this happened it would surely be a bug in the threads
library. Or one of those fabled "spurious wakeups". */
HG_(record_error_Misc)( thr, "Bug in libpthread: pthread_cond_wait "
"succeeded"
" without prior pthread_cond_post");
}
Однако я не могу поверить, что примерно через секунду я получил 222 ложных пробуждения.
Что может быть причиной этого?
В разделяемой памяти есть две условные переменные. Кажется, ошибка всегда происходит с одним из них, а не с другим.