编程语言
首页 > 编程语言> > java-在什么情况下CLOCK_MONOTONIC可能不可用

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

作者:互联网

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

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

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

解决方法:

是.可以合理地假设这一点.

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

CLOCK_MONOTONIC(至少)在IEEE Std 1003.1,2004 Edition中指定,但兼容的libc实现仍可能不支持CLOCK_MONOTONIC.

至少从Linux 3.0(2011)起,Linux内核源代码已经支持CLOCK_MONOTONIC时钟.

从其他来源来看,这还取决于系统的glibc的构建方式. (当使用“仿真计时器”构建时,不支持CLOCK_MONOTONIC.)

在某些情况下,不支持它:

>某些旧的CPU芯片可能存在问题;例如https://bugzilla.redhat.com/show_bug.cgi?id=1499480
> Cygwin的某些(全部?)版本不支持此功能.
> ARM上的某些(全部?)uCLibc版本不支持该功能.

CLOCK_MONOTONIC也可能受支持,但有问题:

> Linux clock_gettime(CLOCK_MONOTONIC) strange non-monotonic behavior

标签:gettimeofday,clock,linux,java,time
来源: https://codeday.me/bug/20191025/1925778.html