Я обнаружил, что std::condition_variable
очень сложно использовать из-за ложных пробуждений. Поэтому иногда мне нужно установить такие флаги, как:
atomic<bool> is_ready;
Я установил is_ready
в true
, прежде чем позвонить (notify_one()
или notify_all()
), а затем я жду:
some_condition_variable.wait(some_unique_lock, [&is_ready]{
return bool(is_ready);
});
Есть ли какая-то причина, по которой я не должен просто делать это: (Edit: Хорошо, это действительно плохая идея.)
while(!is_ready) {
this_thread::wait_for(some_duration); //Edit: changed from this_thread::yield();
}
И если condition_variable
выбрал продолжительность ожидания (я не знаю, правда ли это или нет), я предпочитаю сам выбирать.