[英]Per-thread singleton-like using thread_local storage
使用thread_local
存储持续时间是否有任何警告:
template <class T>
inline T &thread_local_get()
{
thread_local T t;
return t;
}
然后在不同的线程中(例如)
thread_local_get<float>() += 1.f;
cppreference上的文档说明了线程本地存储的持续时间:
线程存储持续时间。 在线程开始时分配对象,并在线程结束时释放对象。 每个线程都有其自己的对象实例。 只有声明为thread_local的对象才具有此存储时间。 thread_local可以与static或extern一起出现以调整链接。
这是否为每个T(在编译期间)和每个调用线程正确分配一个thread_local
实例? 是否有可能导致未定义行为的情况?
我没有看到理论上的警告,因为在实例化之后,模板的行为(从编译器的角度来看)应该完全像普通函数一样。
尽管如此,我还是建议您在使用它之前检查编译器对thread_local
支持:例如gcc在类static thread_local
成员中存在一个错误 ,至少在以gcc 5.1.0为特征的最新TDM-GCC发行版中似乎仍然存在。 我不知道这个特定的bug是否也会影响函数的静态成员(应该不会),可能您正在使用其他编译器,但是我的建议仍然是在使用此功能之前进行一些实验。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.