现在,C++将thread_local
存储添加为语言功能,我想知道一些事情:
thead_local
可能要花多少钱?thread_local
都必须为每个创建的线程提供特定于线程的存储空间。 最佳答案
存储空间:变量的大小*线程数,或者可能是(sizeof(var)+ sizeof(var *))*线程数。
有两种实现线程本地存储的基本方法:
在Intel平台上,变体2通常是通过某些段寄存器(FS或GS,我不记得了)实现的。 GCC和MSVC都支持此功能。因此,访问时间与全局变量一样快。
这也是可能的,但实际上我还没有看到,可以通过现有的库函数
pthread_getspecific
来实现。这样,性能将类似于1.或2.,再加上库调用开销。请记住,变体2。+库调用开销仍然比内核调用快很多。