c++ - 在 C++ 中检查单调时钟的滴答声等待是免费的吗?

标签 c++ c++-chrono

假设我们有一个非常基本的代码来检查耗时间隔

#include <iostream>
#include <chrono>
 
int main()
{
        auto start = std::chrono::steady_clock::now();
        // some work
        auto end = std::chrono::steady_clock::now();
        std::chrono::duration<double> diff = end-start;
        std::cout << "The interval is " << diff.count() << "\n";
}

每次调用 std::chrono::steady_clock::now() 是否会阻塞其他线程?它是否被认为是无锁的,甚至是无等待的?对 std::chrono::steady_clock::now() 的调用是否会导致任何其他线程饥饿或阻塞?

我最感兴趣的是规范对 std::chrono::steady_clock::now() 的保证。如果它不能保证它是免费等待的,有什么方法可以在 MSVC/gcc/clang 上获得保证免费等待的单调时钟的滴答声?

最佳答案

C++ 标准对此问题保持沉默。

理由:每个操作系统都有某种获得单调时间的方法。在硬件层面,这是每个时钟周期的计数器。在操作系统级别,这可能会或可能不会转换为某些方便的单位,例如纳秒。

问题<chrono>解决的问题是,当一个人跨操作系统移动时,有时甚至从一个版本移动到下一个版本时,用于获取这一时间度量的操作系统 API 会有所不同。 <chrono>使 C++ 程序员的底层 API 统一。不多不少。

因此,要回答这个问题,您确实必须深入了解操作系统级别的计时 API。

关于c++ - 在 C++ 中检查单调时钟的滴答声等待是免费的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68232011/

相关文章:

c++ - 将 uint64_t 转换为 time_point

c++ - 不匹配的类型 'std::chrono::_V2::steady_clock' 和 'std::chrono::_V2::system_clock'

c++ - 如何使用 boost::chrono 休眠?

c++ - 如何判断我的 struct tm 是否处于无效状态?

c++ - 有什么方法可以将 varargs 与 boost::format 一起使用吗?

c++ - 从 C++ 调用 lua 函数时如何使表和变量值保持不变?

c++ - 进程被终止时智能指针的行为

c++:使用X Macro在类中定义枚举和字符串数组?

c++ - qt中通过clicked函数直接执行一个batch

c++ - 如何将消息时间戳写入日志文件?