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/3657289/

相关文章:

linux - 生产者消费者实现

linux - 在 unix 上创建标记文件的最便宜的方法

linux - 参数未传递给 shell 脚本 copyfile.sh : 1: copyfile. sh: [d: 未找到

C++ : convert symbols to code line numbers programmatically

c++ - clock() 只返回 0

python - 有没有可用的Python模块可以在一定时间后发出警报

linux - wget 的 strace 给出了奇怪的套接字调用

c - 这是什么类型的声明?

c - 为什么 gcc 找不到我的静态库?

c++ - 如何在 while 循环中使用时钟