gpt4 book ai didi

c++ - C++ 编译器如何在 C++0x 中实现线程本地存储?

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

c++编译器如何在C++0x中实现线程本地存储

我在谷歌搜索过这个。但我找不到任何关于此的信息。

有人有这方面的资料吗??

最佳答案

阅读 Wikipedia entry .

线程本地存储并不是 C++ 特有的。有时它有不同的名称,例如“TLS”(只是线程本地存储的缩写)或“线程特定存储”(TSS)。

大多数操作系统都提供 API 来访问每个线程的存储。例如,Windows 有一个 bunch of API functions以“TLS”开头。在底层,Win32 为各种每线程数据保留了一个特殊区域,包括用户线程本地存储,可通过特定的 CPU 寄存器(x86 上的 FS)访问。 Linux 通过 pthread API 提供特定于线程的存储,其名称类似于 pthread_key_create ,并且这些通常使用类似的技术来实现。

操作系统可能根本不提供任何支持。但是,如果操作系统通过 API 提供进程唯一的线程 ID,那么 C++ 运行时库可以在概念上维护类似于 std::map<thread_id, per_thread_storage> 的东西。内部。当然,那还有个问题per_thread_storage是。如果一个程序是静态链接的,它可能只是一个指向一个大结构的指针,其中所有在程序中声明为元素的线程局部存储变量。这是一种过于简单化的方法,但您大致了解。

访问线程局部存储变量显然不仅仅是直接的内存读取或写入。它可能比这更复杂。如果您要在特定函数中大量使用线程局部/特定存储,我建议您先将线程局部存储指针复制到局部变量中。

关于c++ - C++ 编译器如何在 C++0x 中实现线程本地存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3734512/

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