Является ли процесс CLOCK_MONOTONIC (или поток) специфичным? - PullRequest
6 голосов
/ 09 февраля 2011

Если я получу время с помощью clock_gettime (CLOCK_MONOTONIC, x), затем вызову yield (например, sched_yield ()), а затем снова получу время CLOCK_MONOTONIC, будет ли разница во времени включать время, в течение которого программа не работала (получив), или CLOCK_MONOTONIC только отслеживает время, в течение которого выполняется программа?Мои тесты, кажется, подразумевают последнее, но я хотел бы знать наверняка.

Кроме того, если CLOCK_MONOTONIC не включает в себя время, полученное, есть ли другой монотонный таймер (то есть тот, который не подвержен скачкам, вызваннымпо нтп) что делает?

Ответы [ 2 ]

8 голосов
/ 09 февраля 2011

Ответ Максима и комментарии к нему ответил на вторую часть вашего вопроса, я считаю. Чтобы расширить ответ на первую часть, POSIX 2008 состояния

If the Monotonic Clock option is supported, all implementations shall support a clock_id of CLOCK_MONOTONIC defined in <time.h>. This clock represents the monotonic clock for the system. For this clock, the value returned by clock_gettime() represents the amount of time (in seconds and nanoseconds) since an unspecified point in the past (for example, system start-up time, or the Epoch). This point does not change after system start-up time.

В частности, обратите внимание на «монотонные часы для системы». То есть для каждой системы, а не для процесса, он продолжает работать, даже если ваш процесс не запущен. Кроме того, «Эта точка не изменяется после запуска системы», что также означает, что она продолжает работать независимо от того, запущен или неактивен конкретный процесс.

Итак, либо вы обнаружили ошибку в реализации Linux, либо, что более вероятно, в вашей тестовой программе.

5 голосов
/ 09 февраля 2011

Единственная разница между CLOCK_REALTIME и CLOCK_MONOTONIC заключается в том, что последнее не может быть установлено.Эти часы тикают, даже когда ваш процесс не запущен.

http://www.opengroup.org/onlinepubs/009604599/functions/clock_getres.html

Обратите внимание, что абсолютное значение монотонных часов не имеет смысла (поскольку его происхождение произвольно), итаким образом, нет необходимости устанавливать его.Кроме того, приложения реального времени могут полагаться на тот факт, что значение этих часов никогда не устанавливается и, следовательно, на интервалы времени, измеренные с этими часами, не будут влиять вызовы clock_settime ().

InК удивлению, в Linux CLOCK_MONOTONIC все еще влияют настройки NTP, поэтому он может вернуться назад.Следовательно, они добавили другие часы CLOCK_MONOTONIC_RAW:

man clock_gettime

CLOCK_MONOTONIC_RAW (начиная с Linux 2.6.28; для Linux) Аналогично CLOCK_MONOTONIC, но обеспечивает доступ к необработанному аппаратному времениэто не подлежит корректировке NTP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...