现在C++正在添加thread_local
存储作为一种语言功能,我想知道一些事情:
- What is the cost of
thead_local
likely to be?
- 与之相关的是:操作系统通常如何实现这一点?看起来像是任何声明的东西
thread_local
必须为创建的每个线程提供特定于线程的存储空间。
存储空间:变量的大小 * 线程数,或者可能是 (sizeof(var) + sizeof(var*)) * 线程数。
实现线程本地存储有两种基本方法:
使用某种系统调用来获取有关当前内核线程的信息。慢点。
使用一些指针,可能在处理器寄存器中,该指针在内核每次线程上下文切换时正确设置 - 同时与所有其他寄存器一样。便宜的。
在英特尔平台上,变体 2 通常通过某些段寄存器(FS 或 GS,我不记得了)来实现。 GCC 和 MSVC 都支持这一点。因此,访问时间与全局变量的访问时间一样快。
这也是可能的,但我还没有在实践中看到它,因为这可以通过现有的库函数来实现,例如pthread_getspecific
。性能将类似于 1. 或 2.,加上库调用开销。请记住,变体 2.+ 库调用开销仍然比内核调用快得多。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)