在什么情况下 CLOCK_MONOTONIC 可能不可用

Ser*_*rCe 6 java linux time clock gettimeofday

Java在 LinuxSystem.nanoTime()的单调实现依赖于操作系统CLOCK_MONOTONIC可用的事实。如果它不可用,它会回退到gettimeofday这可能导致在使用nanoTime. 例如,以下测试可能会失败。

long t1 = System.nanoTime();
long t2 = System.nanoTime();
assert t2 >= t1
Run Code Online (Sandbox Code Playgroud)

在哪些情况下CLOCK_MONOTONIC可能在服务器上不可用?假设CLOCK_MONOTONIC时钟在所有现代 Linux 服务器上都可用是否合理?

Ste*_*n C 6

假设 CLOCK_MONOTONIC 时钟在所有现代 Linux 服务器上都可用是否合理?

是的。这么假设是合理的。

从 gettime 手册条目的措辞,我们可以推断真正旧版本的 glibc 不支持CLOCK_MONOTONIC. (我仍在试图弄清楚它的年龄......但可能是在 glibc 声称符合 POSIX 1003.1 时。)

CLOCK_MONOTONICIEEE Std 1003.1, 2004 Edition 中(至少)指定了CLOCK_MONOTONIC.

Linux 内核源代码CLOCK_MONOTONIC至少从 Linux 3.0 (2011)开始就支持时钟。

从其他来源来看,它还取决于您系统的 glibc 是如何构建的。(当使用“模拟计时器”构建时,CLOCK_MONOTONIC不支持。)

以下是一些不受支持的情况:


也可以CLOCK_MONOTONIC支持但有问题: