【发布时间】:2020-02-11 06:41:56
【问题描述】:
我有 2 个进程(不是线程)应该同时读取系统时钟。为此,第一个进程使用
QTime::currentTime();
第二个进程使用
std::chrono::high_resolution_clock::now();
但是当我读取这两个进程读取的各自时钟值时,我发现总是有几微秒的差异。是不是因为系统时钟是共享资源,所以一个必须等待另一个读完?是不是因为读取系统时钟的函数不一样,所以时间分辨率不一样? (但这对我来说似乎不太可能......因为据我了解,时间分辨率是由 RTC 设置的,而不是高级 API)
我不使用任何特定的“措施”来同步这两个过程。第一个是不断尝试读取系统时钟(它有一段时间(1)),第二个在我启动它时读取系统时钟。所以因为第一个进程总是试图读取系统时钟,我猜当进程 2 尝试读取时钟时可能会出现“竞争条件”。
【问题讨论】:
-
您如何协调这两个进程以尝试在完全相同的时间开始阅读?
-
@jingx 我编辑了我的帖子来回答你的问题
-
这与通常称为竞态条件 无关,例如一个进程必须等待另一个进程释放资源。这只是证明了在完全同时观察两个事件实际上是不可能的,其中完全是由现代计算机时钟的分辨率定义的。
-
让我们同意明确和可重复的 MCVE 公式化实验是一种可行的方法,而不是模糊的、固执己见的假设 - 总比说 “我想会有可能是..." 定义一个测试 可能在一个常用平台上正确编码 - 比如在godbolt.org/z/ZVnO6R 或类似在tio.run/# 上(那里有 680 多种编译/解释语言) --- 我们都开始有共同点来测试 { [PASS] | [失败] }-场景并为原始问题推广任何改进的解决方案 --- 既可重复又可量化,不是吗?
标签: concurrency parallel-processing race-condition real-time-clock