繁体   English   中英

使用thread_local存储的单线程类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM