像使用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有一个类静态thread_local
成员的错误,至少在最新的以gcc 5.1.0为特色的TDM-gcc发行版中似乎仍然存在。我不知道这个特定的bug是否也会影响函数的静态成员(不应该),而且可能你使用的是不同的编译器,但我的建议是在使用这个功能之前做一些实验。
相关文章:
- 在C/C++中执行"_dl_init"(程序初始化)是单线程的吗
- 特定对象文件的单线程生成
- 如何在类中同时运行某些内容(在单线程平台中)?
- GDB 8.1 无法在单线程简单程序中跟踪 std::string 变量的值
- 双线程应用比单线程应用慢 C++ (VC++ 2010 Express).如何解决?
- OpenMP:共享同一算法的单线程和多线程实现
- std::原子布尔值或普通全局布尔值在单线程中很好吗?
- 重写多线程事件驱动的C 程序以使用单线程Boost :: Asio
- C++多线程操作比单线程慢
- 多线程和单线程代码维护
- 线程池的计时测试:单线程 vs 回调 tp vs 未来 tp
- 在 Linux 中从单独的单线程进程生成多线程进程时出现问题
- C++多线程性能比单线程代码慢
- 即使在单线程程序中,共享指针是否在引用计数中使用原子操作
- 从单线程到多线程图像处理
- 当发送多个同时请求时,单线程异步系统中Beast Boost异步HTTP客户端的行为
- 在单线程中使用 asio::async_write 时获得"the requested resource is in use"
- 在C++中,如何在并发读取和锁定的单线程写入uncodered_map之间进行交替
- wxWidgets-单线程多任务处理
- 像使用thread_local存储一样的单线程