Ben*_*ird 6 c linux time multithreading process
如果我使用clock_gettime(CLOCK_MONOTONIC,x)获得时间,则调用yield(例如sched_yield()),然后再次获得CLOCK_MONOTONIC时间,时间的差异是否包括程序未运行的时间(已经产生),或者CLOCK_MONOTONIC只跟踪程序执行的时间吗?我的测试似乎暗示后者,但我想知道肯定.
此外,如果CLOCK_MONOTONIC不包括产生的时间,是否还有另一个单调计时器(即一个不受ntp引起的跳跃)?
答案马克西姆及其评论回答了你问题的第二部分,我相信.为了扩展第一部分的答案,POSIX 2008指出
If the Monotonic Clock option is supported, all implementations shall support a clock_id of CLOCK_MONOTONIC defined in <time.h>. This clock represents the monotonic clock for the system. For this clock, the value returned by clock_gettime() represents the amount of time (in seconds and nanoseconds) since an unspecified point in the past (for example, system start-up time, or the Epoch). This point does not change after system start-up time.
特别要注意"系统的单调时钟".也就是说,即使你的进程没有运行,每个系统而不是每个进程也会保持滴答作响.此外,"此点在系统启动时间后不会发生变化."这再次暗示无论特定进程是在运行还是在睡眠,它都会保持滴答声.
所以,要么你在Linux实现中发现了一个错误,要么更有可能在你的测试程序中找到了错误.
CLOCK_REALTIME和CLOCK_MONOTONIC之间的唯一区别是后者无法设置.即使您的进程未运行,这些时钟也在滴答作响.
http://www.opengroup.org/onlinepubs/009604599/functions/clock_getres.html
注意,单调时钟的绝对值是没有意义的(因为它的原点是任意的),因此不需要设置它.此外,实时应用程序可以依赖于此时钟的值从未设置的事实,因此,使用此时钟测量的时间间隔不会受到对clock_settime()的调用的影响.
令人惊讶的是,在Linux中,CLOCK_MONOTONIC似乎仍然受到NTP调整的影响,因此它可能会倒退.因此他们添加了另一个时钟CLOCK_MONOTONIC_RAW:
man clock_gettime
CLOCK_MONOTONIC_RAW(自Linux 2.6.28;特定于Linux)与CLOCK_MONOTONIC类似,但提供对不受NTP调整影响的基于硬件的原始时间的访问.