在Java中System.nanoTime()
的单调Linux上实现依赖于一个事实,即CLOCK_MONOTONIC
是可用的操作系统。如果它没有,它退到gettimeofday
这可能会导致当间隔使用测量得到一个负的时间间隔nanoTime
。例如,下面的测试可能会失败。
long t1 = System.nanoTime();
long t2 = System.nanoTime();
assert t2 >= t1
在什么情况下CLOCK_MONOTONIC
可能无法使用的服务器上?它是合理的假设,CLOCK_MONOTONIC
时钟被提供的所有现代的Linux服务器上?
是。这是合理的假设。
从GETTIME手工录入的措辞,我们可以推断的glibc,真正的老版本不支持CLOCK_MONOTONIC
。(我仍然试图找出如何老...但也许当glibc的POSIX声称合规1003.1。)
CLOCK_MONOTONIC
指定(至少)在IEEE标准1003.1,2004年版,虽然它提供符合规定的libc实现为不支持的可能性依然存在CLOCK_MONOTONIC
。
Linux内核源代码已经具备了支持CLOCK_MONOTONIC
在因为Linux 3.0最少(2011)时钟。
从其他来源,这也取决于你的系统的glibc的是如何构建的。(当使用“模拟计时器”建,CLOCK_MONOTONIC
不支持。)
这里有一些情况下是不支持:
可能有一些旧的CPU芯片问题; 例如https://bugzilla.redhat.com/show_bug.cgi?id=1499480
它不支持Cygwin的某些(所有?)版本。
它不支持uClibc中对ARM在某些(所有?)版本。
它也可能CLOCK_MONOTONIC
被支持,但车:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句