Which one of the two functions is better
#include <time.h>
int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp);
OR
#include <time.h>
int nanosleep(const struct timespec *rqtp, struct timespec *rmtp);
The advantages of clock_nanosleep over nanosleep are:
ntpd, etc. With nanosleep and precalculating the interval to sleep to reach a given absolute time, you'll fail to wake if the clock is reset and the desired time arrives "early". Also, there's a race condition with scheduling using interval times: If you compute the interval you want to sleep, but you get preempted before calling nanosleep and don't get scheduled again for a while, you'll again sleep too long.On my system, man 2 clock_nanosleep explains the differences between the two functions thus:
Like nanosleep(2), clock_nanosleep() allows the caller to sleep for an
interval specified with nanosecond precision. It differs in allowing
the caller to select the clock against which the sleep interval is to
be measured, and in allowing the sleep interval to be specified as
either an absolute or a relative value.
The clock_id argument [...] can have one of the following values:
CLOCK_REALTIME A settable system-wide real-time clock.
CLOCK_MONOTONIC A non-settable, monotonically increasing clock that
measures time since some unspecified point in the past
that does not change after system startup.
CLOCK_PROCESS_CPUTIME_ID
A settable per-process clock that measures CPU time
consumed by all threads in the process.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With