【问题标题】:clock_gettime not monotonic on androidandroid上的clock_gettime不是单调的
【发布时间】:2014-08-19 06:20:27
【问题描述】:

我正在尝试使用clock_gettime() 功能,我需要使用CLOCK_REALTIME,因为我正在尝试同步多个设备。但是当我给clock_gettime() 打了大约 10 到 20 次电话时,我发现其中一些电话是负面的。为什么会发生这种情况,我能做些什么来克服它?从我在互联网上阅读的内容来看,发生这种情况的原因之一是处理器使用多个内核并且不同的内核不同步。仍然是这种情况还是可能有其他一些因素导致clock_gettime() 返回不稳定的值。我看过这些clock_gettime() still not monotonic - alternatives?Linux clock_gettime(CLOCK_MONOTONIC) strange non-monotonic behavior 以及Why is clock_gettime so erratic?。但是我不能使用 CLOCK_MONOTONIC 或 CLOCK_MONOTONIC_RAW。我需要使用 CLOCK_REALTIME。在执行这些实验时,我还关闭了 NTP 同步,并观察到时间仍然会变为负数。我还能做些什么来克服这个问题?

【问题讨论】:

  • 理论上,您可以使用挂钟时间进行初始多设备同步,然后切换到单调时间以获得稳定的源(实时X等于单调时间Y;去前进只是做差异)。这可能行不通,因为不同设备上的挂钟不太可能精确匹配,并且不同的时钟不会同步前进,除非它们主动同步。根据您要执行的操作,您可能只需要设计算法以在面对不稳定的时间源时正常工作。

标签: linux performance time android-ndk embedded-linux


【解决方案1】:

您不能假设 CLOCK_REALTIME 是单调的,或者您设备的挂钟时间从不向前或向后跳跃。

详情请参阅此答案: Difference between CLOCK_REALTIME and CLOCK_MONOTONIC?

其他可行的解决方案取决于您实际尝试解决的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多