两个功能中哪一个更好
#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);
答案 0 :(得分:15)
clock_nanosleep
优于nanosleep
的优点是:
ntpd
等重置。使用nanosleep
并预先计算睡眠间隔以达到给定的绝对时间,你'如果时钟复位并且所需时间“早”到达,则无法唤醒。此外,还有一个使用间隔时间进行调度的竞争条件:如果您计算要休眠的间隔,但是在调用nanosleep
之前先被抢占并且暂时不再安排,您将再次入睡长。答案 1 :(得分:7)
在我的系统上,man 2 clock_nanosleep
解释了这两个功能之间的差异:
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.