有没有办法使用GCC的__thread完全模拟thread_local?

4 c++ gcc thread-local c++11

C++ 11标准包含一个新的附加 - thread_local说明符 - 它使静态变量成为线程局部的.标准的thread_local支持非平凡类型 - 具有构造函数和析构函数的类型.不幸的是,GCC仅通过__thread作为扩展名提供的说明符来支持普通类型.有没有一种方法可以效仿thread_local之上__thread?实现__thread非常快(相当于常规变量加上两个间接),所以我想避免热路径中的库函数.

我正在使用GCC和Linux.不需要携带.

Pla*_*aHH 7

没有.

gcc目前没有能力在线程创建/销毁时为__thread的东西运行ctor/dtor,所以除非你不需要ctor/dtor来运行(在这种情况下__thread正是你需要的,没有什么可以在它上面模拟是必要的),什么都没有像thread_local一样工作.

但是,如果您可以使用延迟初始化(例如__thread T* ptr; if(!ptr){...}),那么您可以pthread_key_create在可以注册将在线程销毁时运行的销毁函数的位置进行破解,然后您可以在那里注册所有指针.

或者您可以使用boost::thread_specific_ptr或多或少这样做(可能不使用__thread TLS作为底层实现细节)