有没有办法完全模仿thread_local使用GCC的__thread?(Is there any

2019-06-27 05:58发布

在C ++ 11标准中包含新增加 - 在thread_local符 - 这使得静态变量线程局部。 该标准thread_local支持非平凡的类型 - 那些有构造函数和析构函数。 不幸的是GCC通过仅支持琐碎类型__thread为扩展提供符。 有没有一种方法可以效仿thread_local之上__thread ? 实施__thread非常快(相当于常规变量加上两种间接),所以我想避免在炎热的路径库函数。

我使用GCC和Linux。 不要求便携性。

Answer 1:

没有。

GCC目前还没有运行构造函数/析构函数对线程创建/销毁__thread的东西的能力,因此,除非你不需要构造函数/析构函数运行(在这种情况下__thread是你所需要的东西,并没有什么在它上面效仿需要),有什么然而这就像thread_local。

然而,如果你可以延迟初始化的生活(如__thread T* ptr; if(!ptr){...}您可以一起砍东西pthread_key_create在那里你可以注册将在线程破坏运行的杀伤功能,然后您可以将所有指针是否注册。

或者你可以使用boost::thread_specific_ptr这或多或少做到这一点(可能不使用__thread TLS作为底层的实现细节)



文章来源: Is there any way to fully emulate thread_local using GCC's __thread?