【问题标题】:Can anyone clarify: Is steady_clock trustworthy between threads in C++任何人都可以澄清一下:在 C++ 中的线程之间是否可以信赖 stable_clock
【发布时间】:2020-03-07 05:44:56
【问题描述】:

谁能确认(或否认) stable_clock 在线程之间是否“值得信赖”?根据文章Is the epoch of steady_clock relative to when the operating system starts? or to the process itself?,有一些关于稳定时钟在系统级别,进程之间是否值得信赖的讨论。我的问题是,线程之间的 stable_clock 至少值得信赖吗?

【问题讨论】:

    标签: c++ multithreading system-clock


    【解决方案1】:

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

    clock 是一个由 durationtime_point 和函数 now() 组成的包,用于获取当前的 time_point。时钟的time_point 的起源称为时钟的纪元。

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

    请注意,这仅适用于标准范围内。由于您链接到的问题与单独的流程有关,该标准并未强制要求以一种或另一种方式进行行为。

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

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

    【讨论】:

    • 情况可能会也可能不会。问题是我提供给 URL 的帖子的第二个答案从未被反驳。事实上,它被投票赞成。所以,就是说,让我更具体一点:假设一个线程产生四个线程,四个线程根据事件发布特定的 time_points。并且父线程具有对这些时间点的适当同步访问。父线程是否可以相信四个线程各自发布的 stable_time 值可以相互比较?
    • @Weedware,该答案及其问题涉及单独的 进程 并且答案是正确的,因为 C++ 标准不关心进程(超出其范围意味着它不强制要求行为)。它确实非常关心线程,因为线程是标准本身的一部分。我会更新答案,希望能更清楚。
    • 所以,简而言之,我的问题的答案是肯定的。
    • 简而言之,是的。我只是觉得你想要比“是”多一点的支持 :-)
    猜你喜欢
    • 1970-01-01
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 2022-11-09
    • 1970-01-01
    • 2023-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多