gpt4 book ai didi

c++ - thread_local 的成本

转载 作者:IT老高 更新时间:2023-10-28 22:20:12 27 4
gpt4 key购买 nike

现在 C++ 正在添加 thread_local 存储作为语言功能,我想知道一些事情:

  1. thead_local 的成本可能是多少?
    • 在内存中?
    • 用于读写操作?
  2. 与此相关:操作系统通常如何实现这一点?似乎任何声明为 thread_local 的东西都必须为创建的每个线程提供特定于线程的存储空间。

最佳答案

存储空间:变量大小 * 线程数,或者可能是 (sizeof(var) + sizeof(var*)) * 线程数。

实现线程本地存储有两种基本方式:

  1. 使用某种系统调用来获取有关当前内核线程的信息。慢慢来。

  2. 使用一些指针,可能在处理器寄存器中,内核在每次线程上下文切换时正确设置 - 与所有其他寄存器同时设置。便宜。

在英特尔平台上,变体 2 通常通过一些段寄存器(FS 或 GS​​,我不记得)来实现。 GCC 和 MSVC 都支持这一点。因此,访问时间与全局变量一样快。

这也是可能的,但我还没有在实践中看到它,因为这可以通过现有的库函数来实现,例如 pthread_getspecific。然后性能将像 1. 或 2.,加上库调用开销。请记住,变体 2. + 库调用开销仍然比内核调用快很多。

关于c++ - thread_local 的成本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8489819/

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