线程_local变量何时以及如何初始化和销毁?

问题描述 投票:0回答:2

我想更好地了解 thread_local 在我的代码中使用它之前。

比方说,我声明

thread_local myclass value;

这将创建新的 myclass 的每个线程的 value? 当线程退出时会发生什么?实例会被释放还是会留在内存中的某个地方?什么时候会调用destructor?

是否 thread_local 锁定构造函数,以便在任何时刻只能调用一个?

c++ destructor thread-local
2个回答
8
投票

[basic.stc.thread]1 所有用 thread_local 关键词有 线程存储时间. 这些实体的存储时间应持续在创建它们的线程中。每个线程有一个不同的对象或引用,使用声明的名称是指与当前线程相关联的实体。

[basic.stc.thread]2 具有线程存储持续时间的变量应在其第一次odr-使用(6.2)前初始化,如果构造,应在线程退出时销毁。

不,构造函数调用没有自动同步。不需要,因为只有一个线程可能尝试构造一个给定的线程局部对象。


4
投票

根据 该存储期限参考 a thread_local 变量。

...在线程开始的时候被分配,在线程结束的时候被反分配。

所以,是的,当线程结束时,这个变量的生命期是 thread_local 变量也结束,这意味着那些特定的实例将被销毁。

© www.soinside.com 2019 - 2024. All rights reserved.