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

标签 java linux time clock gettimeofday

Java System.nanoTime()的单调 implementation on Linux依赖于 CLOCK_MONOTONIC 的事实在操作系统上可用。如果它不可用,它会回退到 gettimeofday当使用 nanoTime 测量间隔时,这可能导致获得负时间间隔。例如,以下测试可能会失败。

long t1 = System.nanoTime();
long t2 = System.nanoTime();
assert t2 >= t1

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

最佳答案

Is it reasonable to assume that CLOCK_MONOTONIC clock is available on all modern Linux servers?

是的。可以合理地假设。

从gettime manual entry的写法可以推断,真正老版本的glibc是不支持CLOCK_MONOTONIC的。 (我仍在尝试弄清楚有多长时间......但可能是在 glibc 声称符合 POSIX 1003.1 时。)

CLOCK_MONOTONIC(至少)在 IEEE 标准 1003.1,2004 版中指定,尽管兼容的 libc 实现仍然可能不支持 CLOCK_MONOTONIC

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

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

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


CLOCK_MONOTONIC 也有可能被支持但是有问题:

关于java - 在什么情况下 CLOCK_MONOTONIC 可能不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51344787/

相关文章:

java - java中从文件输入

c - 使用 arm-linux-gnueabi-gcc 交叉编译 ARMv6l 的标志

linux - linux中的codecvt头文件替换

ios - swift : Map function found nil while unwrapping an Optional value

java - 这个缓存线程安全吗?

java - 如何更改基于 JPanel 的 swing 应用程序(或窗口)的默认图标

java - 正则表达式找到最短匹配?

linux - 将程序的输出重定向到旋转文件

datetime - Go time.Now() 总是 2009-11-10 23 :00:00 +0000 UTC

python - Python 中的日期时间格式