【发布时间】: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