Цитата из cppreference просто напоминает вам, что здесь важен планировщик ОС и что другие задачи, требующие ресурсов платформы, могли бы использовать процессорное время, необходимое вашему потоку для возврата из wait_for()
- независимо от того, является ли указанная длительность тайм-аута нулевой или нет.Это все.Технически вы не можете получить больше, чем на платформе не в реальном времени.Таким образом, стандарт C ++ ничего не говорит об этом, но вы можете увидеть другие интересные вещи - см. Абзац для wait_for()
в [futures.unique_future¶21] :
Эффекты: Нет, если в общем состоянии содержится отложенная функция ([futures.async]), в противном случае блокируется до тех пор, пока общее состояние не будет готово или до относительного таймаута ([thread.req.timing]), определенного rel_time
срок действия истек.
Нет такого упоминания о дополнительной задержке здесь, , но в нем говорится, что вы заблокированы , и он остается реализациейзависит * является ли wait_for()
yield()
потоком 1 первым делом после такой блокировки или немедленного возврата, если продолжительность тайм-аута равна нулю.Кроме того, может также потребоваться, чтобы реализация синхронизировала доступ к будущему статусу блокирующим образом, который должен быть применен перед проверкой того, будет ли возможен немедленный возврат.Следовательно, у вас даже нет гарантии на блокировка свободы здесь, не говоря уже о ожидании ожидания .
Обратите внимание, что то же самое относится к вызову wait_until
со временем в прошлом.
Это все еще имеет место, когда timeout_duration равно 0?Если да, есть ли другой способ запрашивать состояние гарантированным образом без ожидания?
Так что да, реализация wait_free()
несмотря на это, все еще имеет место .Таким образом, это самое близкое к без ожидания , которое вы получите для проверки состояния.
1 Проще говоря, это означает«освобождение» процессора и помещение вашего потока в конец очереди планировщика, что дает другим потокам некоторое время процессора.