Как бы я оценил это?Какую функцию синхронизации вы бы предложили использовать?
Если вы хотите получить разрешение (точность) различных элементов синхронизации, вы можете использовать функцию clock_getres
, передаваяв различных CLOCK_
идентификаторах, например:
#include <stdio.h>
#include <time.h>
static void printres(clockid_t id)
{
struct timespec ts;
int rc = clock_getres(id, &ts);
printf("clock id: %d\n", (unsigned int)id);
if (rc != 0) {
printf("Error: %d\n", rc);
return;
}
printf("tv_sec = %lu\ntv_nsec = %lu\n", ts.tv_sec, ts.tv_nsec);
}
int main(int argc, char** argv)
{
printres(CLOCK_REALTIME);
printres(CLOCK_MONOTONIC);
printres(CLOCK_PROCESS_CPUTIME_ID);
printres(CLOCK_THREAD_CPUTIME_ID);
return 0;
}
В моей системе tv_nsec
для всех, кроме CLOCK_THREAD_CPUTIME_ID
, равно 1000
, для CLOCK_THREAD_CPUTIME_ID
значение для tv_nsec
равно1
, это означает, что точность для других типов часов составляет 1 миллисекунду (1000 наносекунд), тогда как точность CLOCK_THREAD_CPUTIME_ID
составляет 1 наносекунду.
Для вашей первой функции, которая вызывает localtime
точность для этого была бы 1 секунда, поскольку эта функция вычисляет время от эпохи Unix в секундах.
Что означают опции компилятора -O0 -lrt, когда мне приходится компилировать с gcc-O0 -lrt times.c -o хронометраж?
Для некоторых компиляторов, таких как gcc
и clang
, опция -O
означает оптимизацию кода при компиляции до указанного уровня, поэтому-O0
означает , а не для оптимизации кода на всехl, это обычно полезно при отладке кода.
Опция -l
говорит, что компилируется с указанной библиотекой, поэтому -lrt
говорит, что компилируется с использованием библиотеки rt
или "библиотеки реального времени";это необходимо в некоторых системах, так как CLOCK_REALTIME
может быть определено в этой библиотеке.
Я надеюсь, что это может помочь.