当 2 个进程试图同时读取系统时钟时是否存在竞争条件?
is there a race condition when 2 processes attempt to read the system clock at the same time?
我有 2 个进程(不是线程)应该同时读取系统时钟。为此,第一个进程使用
QTime::currentTime();
第二个进程使用
std::chrono::high_resolution_clock::now();
但是当我读取这2个进程分别读取的时钟值时,发现总是相差几微秒。是不是因为系统时钟是共享资源,所以要等对方读完?是不是因为读取系统时钟的函数不一样,所以时间分辨率不一样? (但这对我来说似乎不太可能......因为据我所知,时间分辨率是由 RTC 设置的,而不是由高级 API 设置的)
我没有使用任何特定的 'measure' 来同步这两个进程。第一个是不断尝试读取系统时钟(它有一段时间(1)),第二个是在我启动时读取系统时钟。所以因为第一个进程总是试图读取系统时钟,我猜当进程 2 尝试读取时钟时可能会有 'race condition'。
只有在您无法预测哪个进程会报告较早时间或者它们是否会同时报告的意义上存在竞争条件。 (几乎)同时读取时钟不会造成任何危害。两份报告都将准确到 OS 提供信息的能力范围内。根据 OS 和硬件,两个进程可能会也可能不会同时报告。
它可能是也可能不是共享资源。它甚至可能不是引擎盖下的同一个时钟。 std::chrono::high_resolution_clock
通常是 typedef
到 std::chrono::steady_clock
或 std::chrono::system_clock
,它因平台而异。在 macOS/iOS/watchOS high_resolution_clock
上是 typedef
到 steady_clock
并计算系统启动后的纳秒数。此度量与一天中的时间或日历上的日期无关。
有steady_clock
和system_clock
的区别说明。
我有 2 个进程(不是线程)应该同时读取系统时钟。为此,第一个进程使用
QTime::currentTime();
第二个进程使用
std::chrono::high_resolution_clock::now();
但是当我读取这2个进程分别读取的时钟值时,发现总是相差几微秒。是不是因为系统时钟是共享资源,所以要等对方读完?是不是因为读取系统时钟的函数不一样,所以时间分辨率不一样? (但这对我来说似乎不太可能......因为据我所知,时间分辨率是由 RTC 设置的,而不是由高级 API 设置的)
我没有使用任何特定的 'measure' 来同步这两个进程。第一个是不断尝试读取系统时钟(它有一段时间(1)),第二个是在我启动时读取系统时钟。所以因为第一个进程总是试图读取系统时钟,我猜当进程 2 尝试读取时钟时可能会有 'race condition'。
只有在您无法预测哪个进程会报告较早时间或者它们是否会同时报告的意义上存在竞争条件。 (几乎)同时读取时钟不会造成任何危害。两份报告都将准确到 OS 提供信息的能力范围内。根据 OS 和硬件,两个进程可能会也可能不会同时报告。
它可能是也可能不是共享资源。它甚至可能不是引擎盖下的同一个时钟。 std::chrono::high_resolution_clock
通常是 typedef
到 std::chrono::steady_clock
或 std::chrono::system_clock
,它因平台而异。在 macOS/iOS/watchOS high_resolution_clock
上是 typedef
到 steady_clock
并计算系统启动后的纳秒数。此度量与一天中的时间或日历上的日期无关。
有steady_clock
和system_clock