假设我们有一个非常基本的代码来检查耗时间隔
#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/