1

我有 2 个进程(不是线程)应该同时读取系统时钟。为此,第一个过程使用

QTime::currentTime();

第二个过程使用

std::chrono::high_resolution_clock::now();

但是当我读取这两个进程读取的各自时钟值时,我发现总是有几微秒的差异。是不是因为系统时钟是共享资源,所以一个必须等​​待另一个读完?是不是因为读取系统时钟的函数不一样,所以时间分辨率不一样?(但这对我来说似乎不太可能......因为据我了解,时间分辨率是由 RTC 设置的,而不是高级 API)

我不使用任何特定的“措施”来同步这两个过程。第一个是不断尝试读取系统时钟(它有一段时间(1)),第二个在我启动它时读取系统时钟。所以因为第一个进程总是试图读取系统时钟,我猜当进程 2 尝试读取时钟时可能会出现“竞争条件”。

4

1 回答 1

0

从某种意义上说,只有一个竞争条件,您无法预测哪个进程将报告更早的时间,或者它们是否会报告相同的时间。(接近)同时读取时钟不会造成任何伤害。两种报告都将在操作系统提供信息的能力范围内准确无误。根据操作系统和硬件,两个进程可能会或可能不会同时报告时间。

它可能是也可能不是共享资源。它甚至可能不是引擎盖下的同一个时钟。 std::chrono::high_resolution_clock通常是一个typedefstd::chrono::steady_clockstd::chrono::system_clock它是哪一个因平台而异。在 macOS/iOS/watchOShigh_resolution_clock上是自系统启动typedef后的纳秒数。steady_clock此度量与一天中的时间或日历上的日期无关。

这里steady_clock有和之间的区别的描述。system_clock

于 2019-10-14T16:37:10.027 回答