何时以及如何初始化和销毁thread_local变量?
When and how are thread_local variables initialized and destroyed?
我想在代码中使用它之前更好地理解thread_local
。
比方说,我声明
thread_local myclass value;
这将为使用该value
的每个线程创建新的myclass
实例?线程退出时会发生什么?实例是被释放还是会保留在内存中的某个位置?什么时候会被称为析构函数?
thread_local
是否锁定构造函数,以便随时只能调用一个构造函数?
[basic.stc.thread]/1使用
thread_local
关键字声明的所有变量都具有线程存储持续时间。这些实体的存储应在创建它们的线程期间持续。每个线程都有一个不同的对象或引用,声明名称的使用是指与当前线程关联的实体。[basic.stc.thread]/2具有线程存储持续时间的变量应在第一次使用 odr-use (6.2( 之前初始化,如果构造,则应在线程退出时销毁。
否,构造函数调用没有自动同步。不需要,因为只有一个线程可以尝试构造给定的线程本地对象。
根据此存储持续时间,引用一个thread_local
变量:
。在线程开始时分配,在线程结束时解除分配。
所以是的,当线程结束时,该线程的thread_local
变量的生命周期也会结束,这意味着这些特定实例将被破坏。
相关文章:
- 在std::thread中,joinable()然后join()线程安全吗
- 对于MacOS上的G++,如何添加默认的include目录/usr/local/include和默认的库搜索路径/usr
- <Windows>为什么 std::thread::native_handle 返回类型为"long long unsigned int"的值,而不是 void*(又名 HANDLE)?
- 分离一个静态常量 std::thread?
- 尝试使用 std::vector<std::thread时出现静态断言失败错误>
- 使用 thread 类在 C++ 中构造线程的动态数组时出错
- 当指向对象的指针作为参数传递给 std::thread 时,内存可见性
- 如何从 std::thread 返回值
- 在C++中使用并行化的预期速度是多少(不是 OpenMp,而是 <thread>)
- "local scope"中的 C++ 初始化静态变量
- 将 std::thread by 值推送到列表中
- 转发变量参数列表以模拟 std::thread
- 嵌入式设备 -> std::thread -> FreeRTOS?
- 对 'std::thread::_M_start_thread CMake 的未定义引用进行基准测试
- 在 /usr/local/lib 下找不到库
- std::thread 增加 DLL 引用计数,从而防止卸载 DLL
- C++编译器错误"cannot be thread-local because it has non-POD type""
- 消除警告"construction of local static object is not thread-safe"
- TLS 变量上的"illegal thread-local reference to regular symbol"错误
- ActiveMQ-CPP 在发送时抛出"Thread local storage limit"达到