Parmi les fonctions de synchronisation, time
, clock
getrusage
, clock_gettime
, gettimeofday
et timespec_get
, je veux bien comprendre comment ils sont mis en œuvre et quelles sont leurs valeurs de retour afin de savoir dans quelle situation je dois les utiliser.
Nous devons d'abord classer les fonctions retournant des valeurs d'horloge murale par rapport aux fonctions retournant des valeurs de processus ou de threads . gettimeofday
retours valeur d'horloge de mur, clock_gettime
renvoie la valeur d'horloge de mur ou de processus ou des valeurs de fils en fonction du Clock
paramètre qui lui est passé. getrusage
et clock
renvoyer les valeurs de processus.
Ensuite, la deuxième question concerne la mise en œuvre de ces fonctions et par conséquent leur exactitude. Quel mécanisme matériel ou logiciel ces fonctions utilisent-elles?
Il semble qu'il getrusage
n'utilise que le tick du noyau (généralement 1 ms de long) et par conséquent ne peut pas être plus précis que le ms. Est ce juste? Ensuite, la getimeofday
fonction semble utiliser le matériel sous-jacent le plus précis disponible. En conséquence, sa précision est généralement de la microseconde (ne peut pas être plus à cause de l'API) sur du matériel récent. Qu'en est-il clock
, la page de manuel parle d '"approximation", qu'est-ce que cela signifie? Qu'en est-il clock_gettime
, l'API est en nanoseconde, cela signifie-t-il qu'elle peut être si précise si le matériel sous-jacent le permet? Qu'en est-il de la monotonie?
Y a-t-il d'autres fonctions?
clock_gettime
, d'où l'utilité d'gettimeofday()
être un peu plus polyvalent queclock_gettime()