【发布时间】:2015-03-19 19:26:45
【问题描述】:
假设我有那个程序使用sem_timedwait 来等待 100 毫秒(获取当前时间,添加 100 毫秒,将结果用作abs_timeout,cf. man page)。现在碰巧在等待信号量时,系统时间由外部进程 (ntp) 设置。
如果运气不好,系统时间会设置为过去 2 天。这将导致 sem_timedwait 等待 2 天 100 毫秒。
有没有办法解决这个问题?
【问题讨论】:
-
如果系统时间设置在过去 2 天,那可不仅仅是运气不好。特别是如果它一直处于 NTP 管理之下。事实上,将系统时间同步到可靠来源是避免此类问题的好方法。
-
@JohnBollinger:虽然避免不连续的跳跃会很好,但现实并没有让我们这么容易做到这一点。不是所有的 Unix 系统都是联网的,不是所有的都有准确的实时时钟,甚至有些系统根本没有实时时钟。毕竟,这就是我们有
CLOCK_MONOTONIC的原因。 -
@johnbollinger:实际上我们不是在谈论 PC,而是在谈论具有无缓冲时钟的嵌入式设备以及所有这些坏东西......