Как 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() справляется с ложными пробуждениями?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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