я наткнулся на этом интересном пункт в Boost thread documentation сегодня:паразитное разблокирование в повышающей нити
void wait(boost::unique_lock<boost::mutex>& lock)
...
Эффекты: Атомно вызов lock.unlock() и блокируют текущий поток , Нить будет разблокирована, когда будет сообщено об этом , для этого -> notify_one() или this-> notify_all(), или ложно. Когда нить разблокирована (для по любой причине), блокировка повторно активирована вызовом lock.lock() перед вызовом wait возвращает. Блокировка также восстанавливается путем вызова lock.lock(), если функция завершает исключение .
Так что меня интересует значение слова «spuriously». Почему поток должен быть разблокирован по ложным причинам? Что можно сделать, чтобы разрешить это?
Похоже, мы находим те же страницы, что не совсем неожиданно :) –
Да, это своего рода резюме моих исследований сегодня, когда я выяснил причину ужасной ошибки, которую я страдал. Документация по ускорению может быть более ясной в этом вопросе –
Я нашел, что повышает всю систему для ожидания и уведомления - особенно в boost :: interprocess - очень неприятно. Я бы использовал его только в том случае, если вам нужно, чтобы он был кросс-платформенным и теперь выполнен. –