Как Condition_variable::wait_for() справляется с ложными пробуждениями?C++

Программы на C++. Форум разработчиков
Гость
Как Condition_variable::wait_for() справляется с ложными пробуждениями?

Сообщение Гость »


На различных платформах допускается ложное пробуждение. Чтобы противостоять этому, мы пишем ниже механизм цикла:

while(ContinueWaiting()) cv.wait (блокировка); // cv — это объект `std::conditional_variable` То же самое понятно и для conditional_variable::wait_until().
Но посмотрите на пример ниже:

const auto period = Returns_10_секунды(); в то время как (! Предикат ()) cv.wait_for(блокировка, продолжительность); Представьте, что ложное пробуждение произошло через 1 секунду. Тайм-аут еще не истек.
Будет ли он ждать еще 10 секунд? Это привело бы к бесконечному циклу, чего, я уверен, не должно произойти. Из исходного кода внутренне wait_for() вызывает wait_until().

Я хочу понять, как wait_for() справляется с ложными пробуждениями?

Вернуться в «C++»