clock_nanosleep()会以某种方式考虑这些时钟调整,还是会影响睡眠时间?
如果需要一个不受时钟调整影响的休眠时间,有哪些替代方案?
解决方法
至少,有一个明确禁用此功能并通过所有评论的补丁这一事实告诉我们,对于内核开发人员来说,它看起来不是一个大问题.所以,目前(4.7)the only things CLOCK_MONOTONIC_RAW
supports是clock_getres()和clock_gettime().
说到调整,因为already noted by Rich CLOCK_MONOTONIC仅根据时钟的性质进行速率调整.发生这种情况是因为hrtimer_interrupt()
以调整的单调时间值(ktime_get_update_offsets_now()-> timekeeping_get_ns()-> timekeeping_delta_to_ns()并且使用xtime_nsec(subject to adjustment)操作)运行其队列.实际上,看看这段代码我可能不再感到惊讶,因为CLOCK_MONOTONIC_RAW不支持clock_nanosleep()(并且可能在将来不会有它) – 调整后的单调时钟使用似乎是hrtimers的基础.
至于替代方案,我认为没有. nanosleep()
uses the same CLOCK_MONOTONIC
,setitimer()
has its own set of timers,alarm()
uses ITIMER_REAL (same as setitimer()
),那(with some indirection)是also our good old friend CLOCK_MONOTONIC
.我们还有什么?我什么都没想.
作为一个不相关的附注,有一个有趣的观察结果,如果你调用clock_nanosleep()作为相对间隔(不是TIMER_ABSTIME),那么CLOCK_REALTIME
actually becomes a synonym for CLOCK_MONOTONIC
.