任何人都可以澄清一下:steady_clock 在 C++ 中的线程之间是否值得信赖

Can anyone clarify: Is steady_clock trustworthy between threads in C++

任何人都可以确认(或否认)steady_clock 是否是线程之间的 "trustworthy"?根据文章 Is the epoch of steady_clock relative to when the operating system starts? or to the process itself?,有一些关于 steady_clock 在进程之间的系统级别是否值得信赖的讨论。我的问题是,steady_clock 至少在线程之间值得信赖吗?

我相信标准的相关部分 [time.clock.req] 规定了时钟 type 规定了纪元,只要您使用 steady_clock, 线程无关:

A clock is a bundle consisting of a duration, a time_point, and a function now() to get the current time_point. The origin of the clock’s time_point is referred to as the clock’s epoch.

如果你不能通过减去两个 time_point 变量可靠地得到一个 duration 只是因为一个是在单独的线程中生成的,那将是一个糟糕的情况:-)

请注意,这仅适用于标准范围内。由于您链接到的问题是与单独的 进程有关, 该标准不以任何方式强制执行行为。

这与编写二进制 time_point(甚至 int)并期望在完全不同的系统上读回它时相同(例如,编写little-endian int 并尝试在 big-endian 系统上读回它。

但标准 确实 涵盖线程,因此您可以安全地将来自相同时钟类型的不同 time_point 变量视为兼容。