Linux clock_gettime(CLOCK_MONOTONIC) 奇怪的非单调行为

标签 linux gcc clock

伙计们,在我的应用程序中,我正在使用 clock_gettime(CLOCK_MONOTONIC) 来测量帧之间的增量时间(gamedev 中的一种典型方法),我不时会遇到一个奇怪的问题clock_gettime(..) 的行为 - 返回值有时不是单调的(即上一个时间大于当前时间)。

目前,如果发生这样的悖论,我只是跳过当前帧并开始处理下一帧。

问题是这怎么可能呢?它是 clock_gettime 的 Linux POSIX 实现中的错误吗?我使用的是 Ubuntu 服务器版 10.04(内核 2.6.32-24、x86_64)、gcc-4.4.3。

最佳答案

man clock_gettime 说:

CLOCK_MONOTONIC_RAW (since Linux 2.6.28; Linux-specific)

Similar to CLOCK_MONOTONIC, but provides access to a raw hardware-based time that is not subject to NTP adjustments.

由于 CLOCK_MONOTONIC_RAW 不是 NTP 调整的主题,我想 CLOCK_MONOTONIC 可能是。

我们在使用 2.6.18 内核和某些特定 Itanium 处理器的 Redhat Enterprise 5.0 时遇到了类似的问题。我们无法在同一操作系统上使用其他处理器重现它。它在 RHEL 5.3 中得到修复,内核稍新一些,还有一些 Redhat 补丁。

关于Linux clock_gettime(CLOCK_MONOTONIC) 奇怪的非单调行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6833542/

相关文章:

c++ - 无法识别 PRIxPtr

c - gcc 的配置选项如何确定默认枚举大小(短或不短)?

parallel-processing - 有没有像 clock() 这样的东西更适合并行代码?

flutter - 试图在抖动中创建更新的数字时钟

linux - 如何在CentOS中安装 "libhyperic-sigar-java"

linux - YCSB 不适用于 HBase

macos - 通过自制软件的 gcc 没有 --without-multilib 选项

go - 如何获得单调的时间部分。Go 中的时间

linux - 用 bash 脚本解析 `ls -l` 的结果

c - 对 pthread_create 和 pthread_join 的 undefined reference