thread_local
存储时间的使用是否有任何警告:
template <class T>
inline T &thread_local_get()
{
thread_local T t;
return t;
}
然后在不同的线程中(例如)
thread_local_get<float>() += 1.f;
cppreference上的doc说明了有关线程本地存储持续时间的信息:
线程存储持续时间。线程开始时分配对象,线程结束时分配对象。每个线程都有自己的对象实例。只有声明为thread_local的对象才具有此存储持续时间。 thread_local可以与static或extern一起出现以调整链接。
这是否为每个T(编译期间)和每个调用线程正确分配了一个thread_local
实例?是否存在任何可能导致未定义行为的情况?
答案 0 :(得分:0)
我没有看到理论上的警告,因为在实例化之后,模板的行为(从编译器的角度来看)与正常函数完全相同。
不过,我建议在使用它之前检查一下thread_local
的编译器支持:例如gcc有a bug with class static thread_local
members,它似乎至少仍然存在于最新的具有gcc 5.1的TDM-GCC发行版中。 0。我不知道这个特定的bug是否也会影响函数的静态成员(它不应该),可能你使用的是不同的编译器,但我的建议仍然是在使用这个功能之前进行一些实验。