在C ++ 11标准中包含新增加 - 在thread_local符 - 这使得静态变量线程局部。 该标准thread_local支持非平凡的类型 - 那些有构造函数和析构函数。 不幸的是GCC通过仅支持琐碎类型__thread
为扩展提供符。 有没有一种方法可以效仿thread_local
之上__thread
? 实施__thread
非常快(相当于常规变量加上两种间接),所以我想避免在炎热的路径库函数。
我使用GCC和Linux。 不要求便携性。
在C ++ 11标准中包含新增加 - 在thread_local符 - 这使得静态变量线程局部。 该标准thread_local支持非平凡的类型 - 那些有构造函数和析构函数。 不幸的是GCC通过仅支持琐碎类型__thread
为扩展提供符。 有没有一种方法可以效仿thread_local
之上__thread
? 实施__thread
非常快(相当于常规变量加上两种间接),所以我想避免在炎热的路径库函数。
我使用GCC和Linux。 不要求便携性。
没有。
GCC目前还没有运行构造函数/析构函数对线程创建/销毁__thread的东西的能力,因此,除非你不需要构造函数/析构函数运行(在这种情况下__thread是你所需要的东西,并没有什么在它上面效仿需要),有什么然而这就像thread_local。
然而,如果你可以延迟初始化的生活(如__thread T* ptr; if(!ptr){...}
您可以一起砍东西pthread_key_create
在那里你可以注册将在线程破坏运行的杀伤功能,然后您可以将所有指针是否注册。
或者你可以使用boost::thread_specific_ptr
这或多或少做到这一点(可能不使用__thread TLS作为底层的实现细节)