33 Thread support library [thread]

33.2 Requirements [thread.req]

33.2.4 Timing specifications [thread.req.timing]

Некоторые функции, описанные в этом разделе, принимают аргумент для указания тайм-аута. Эти тайм-ауты указываются либо как, либо duration как time_­point тип, как указано в [time].

Реализации обязательно имеют некоторую задержку при возврате из тайм-аута. Любые накладные расходы в ответе на прерывание, возврате функции и планировании вызывают задержку «качества реализации», выражаемую как продолжительность Di. В идеале эта задержка должна быть равна нулю. Кроме того, любая конкуренция за ресурсы процессора и памяти вызывает задержку «качества управления», выраженную в продолжительности Dm. Продолжительность задержки может варьироваться от тайм-аута к тайм-ауту, но во всех случаях чем короче, тем лучше.

Функции-члены, имена которых заканчиваются на, _­for принимают аргумент, определяющий продолжительность. Эти функции производят относительные таймауты. Реализации должны использовать устойчивые часы для измерения времени для этих функций.330 Учитывая аргумент продолжительности Dt, продолжительность тайм-аута в реальном времени равна Dt+Di+Dm.

Функции-члены, имена которых заканчиваются на, _­until принимают аргумент, указывающий момент времени. Эти функции производят абсолютные таймауты. Реализации должны использовать часы, указанные в момент времени, для измерения времени для этих функций. Учитывая аргумент точки времени часов, точка Ctвремени часов для возврата из тайм-аута должна быть, Ct+Di+Dm когда часы не корректируются во время тайм-аута. Если часы настроены на время Ca во время тайм-аута, поведение должно быть следующим:

  • if Ca>Ct, функция ожидания должна проснуться как можно скорее, т. е. Ca+Di+Dmпоскольку тайм-аут уже выполнен. [ Note: Эта спецификация может привести к уменьшению общей продолжительности ожидания при измерении по установившимся часам. ] end note

  • if Ca<=Ct, функция ожидания не должна истекать по тайм-ауту до тех пор, пока не Clock​::​now() вернет время Cn>=Ct, т. е. пробуждение в Ct+Di+Dm. [ Note: Когда часы настраиваются в обратном направлении, эта спецификация может привести к увеличению общей продолжительности ожидания при измерении по сравнению с установившимися часами. Когда часы настраиваются вперед, эта спецификация может привести к уменьшению общей продолжительности ожидания при измерении по сравнению с устойчивыми часами. ] end note

Реализация должна вернуться из такого тайм-аута в любой момент от времени, указанного выше, до времени, когда она вернется из установившегося относительного тайм-аута по разнице между Ct и моментом времени вызова _­until функции. [ Note: Реализации должны уменьшать продолжительность ожидания, когда часы переводятся вперед. ]end note

[ Note: Если часы не синхронизированы с постоянными часами, например часами процессора, эти тайм-ауты могут не обеспечивать полезные функции. ] end note

Разрешение синхронизации, обеспечиваемое реализацией, зависит как от операционной системы, так и от оборудования. Наилучшее разрешение, обеспечиваемое реализацией, называется native resolution.

Обеспечиваемые реализацией часы, которые используются для этих функций, должны соответствовать TrivialClock требованиям.

Функция, которая принимает аргумент, определяющий тайм-аут, будет сгенерирована, если во время ее выполнения часы, момент времени или продолжительность выдают исключение. Такие исключения обозначаются как timeout-related exceptions. [ Note: Экземпляры типов часов, времени и продолжительности, предоставленные реализацией, как указано в [time.clock] , не вызывают исключений. ]end note

Все реализации, для которых значимы стандартные единицы времени, обязательно должны иметь устойчивые часы в своей аппаратной реализации.