gpt4 book ai didi

c++ - 即使使用多核上下文,是否有任何 std::chrono 线程安全保证?

转载 作者:IT老高 更新时间:2023-10-28 22:41:32 26 4
gpt4 key购买 nike

首先,我假设调用 std::chrono 的任何函数都保证是线程安全的(如果从不同的线程调用,没有未定义的行为或竞争条件或任何危险)。我说的对吗?

接下来,例如 on windows there is a well known problem related to multi-core processors那力量some implementations of time related systems to allow forcing a specific core to get any time information .

我想知道的是:

  1. 在标准中使用std::chrono,是否有任何保证不会出现think样的问题?
  2. 或者是实现定义的
  3. 或者是否有明确的缺乏保证意味着在 Windows 上您最好始终从同一个内核获取时间?

最佳答案

是的,从不同线程调用 some_clock::now() 应该是线程安全的。

至于您提到的 QueryPerformanceCounter 的具体问题,只是 Windows API 在某些平台上暴露了硬件问题。其他操作系统可能会也可能不会将此硬件问题暴露给用户代码。

就 C++ 标准而言,如果时钟声称是“稳定时钟”,那么它决不能倒退,所以如果在同一个线程上有两次读取,第二次的返回值决不能早于第一个,即使操作系统将线程切换到不同的处理器。

对于非稳定时钟(例如许多系统上的 std::chrono::system_clock),对此没有任何保证,因为无论如何外部代理都可以任意更改时钟。

my implementation of the C++11 thread library (包括 std::chrono 东西)实现注意确保稳定的时钟确实是稳定的。这确实比对 QueryPerformanceCounter 的原始调用强加了成本以确保同步,但不再将线程固定到 CPU 0(它曾经这样做)。我希望其他实现也有解决此问题的方法。

稳定时钟的要求在 20.11.3 [time.clock.req](C++11 标准)中

关于c++ - 即使使用多核上下文,是否有任何 std::chrono 线程安全保证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10894504/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com