Среди функций синхронизации time
, clock
getrusage
, clock_gettime
, gettimeofday
и timespec_get
я хочу четко понимать, как они реализованы и каковы их возвращаемые значения, чтобы знать в какой ситуации я должен их использовать.
Сначала нам нужно классифицировать функции, возвращающие значения wall-clock, сравнивая функции, возвращающие значения процессов или потоков. gettimeofday
возвращает значение настенного времени, clock_gettime
возвращает значение времени настенного времени или или значения потоков в зависимости от параметра clock
, переданного ему. getrusage
и clock
возвращают значения процесса.
Тогда второй вопрос касается реализации этих функций и, как следствие, их точности. Какой аппаратный или программный механизм использует эти функции.
Кажется, что getrusage
использует только галочку ядра (обычно 1 мс) и, как следствие, не может быть более точным, чем мс. Это правильно?
Тогда функция getimeofday
, по-видимому, использует наиболее точные базовые аппаратные средства. Как следствие, его точность, как правило, микросекунды (не может быть больше из-за API) на последних аппаратных средствах.
Что насчет clock
, на странице руководства говорится о "приближении", что это значит?
Что насчет clock_gettime
, API находится в наносекундах, означает ли это, что он может быть настолько точным, если это позволяет его базовое оборудование? Как насчет монотонности?
Существуют ли какие-либо другие функции?