c++ - 从 `std::chrono::system_clock::now().time_since_epoch()` 开始的时间从哪里来,如果从多个线程访问它会阻塞吗?

标签 c++ time hardware c++-chrono

std::chrono::system_clock::now().time_since_epoch() 从何而来? 也就是说,它是与晶体振荡器(物理组件)的直接接口(interface)吗?

如果是晶振,是每核一个还是所有核一个?

如果所有内核都有一个振荡器,如果多个线程同时访问它(低延迟环境),它是否会阻塞线程?

如果每个核心都有一个晶体振荡器,它们如何同步?

最佳答案

C++ 标准不关心如何system_clock::now()得到实现。它只是指定

Returns a time_point object representing the current point in time.

典型的 C++ 标准库实现依赖于底层操作系统系统调用来获取实际的系统时钟值来构造 time_point对象。

在硬件实现方面,您需要考虑硬件架构。但通常系统时钟的维护成本始终存在,无论有多少进程/线程正在读取它。并且系统时钟获取实现为一个轻量级例程,不会导致线程阻塞,不会成为多线程程序中的性能瓶颈。

此外,std::chrono::system_clock::now().time_since_epoch()是一个简单的观察者方法,它只返回嵌入的 duration time_point 中的对象std::chrono::system_clock::now() 返回的对象,这仅涉及 C++ 结构复制。

关于c++ - 从 `std::chrono::system_clock::now().time_since_epoch()` 开始的时间从哪里来,如果从多个线程访问它会阻塞吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46740302/

相关文章:

c++ - 在 C++03 和 C++14 的代码中进行简单随机改组的最佳做法是什么?

c++ - 可变参数模板错误 : "parameter pack must be expanded"

c++ - 什么决定了C++程序中对象销毁的顺序?

io - DMA Controller 和I/O处理器有什么区别

audio - 现代声卡通常包含模拟 OPL2 (YM3812) 芯片吗?

c++ - 使用相同操作系统/编译器时,三角函数的结果是否应该依赖于硬件?

c++ - 相互引用的常量对象

php - 如何从一列时间值中将它们与当前时间进行比较并获得当前时间之后最接近的值?

ruby - 如何解析 Ruby 中的时间间隔?

java - 如何获取 GWT 中的月份/工作日名称?