我想更好地了解 thread_local
在我的代码中使用它之前。
比方说,我声明
thread_local myclass value;
这将创建新的 myclass
的每个线程的 value
? 当线程退出时会发生什么?实例会被释放还是会留在内存中的某个地方?什么时候会调用destructor?
是否 thread_local
锁定构造函数,以便在任何时刻只能调用一个?
[basic.stc.thread]1 所有用
thread_local
关键词有 线程存储时间. 这些实体的存储时间应持续在创建它们的线程中。每个线程有一个不同的对象或引用,使用声明的名称是指与当前线程相关联的实体。[basic.stc.thread]2 具有线程存储持续时间的变量应在其第一次odr-使用(6.2)前初始化,如果构造,应在线程退出时销毁。
不,构造函数调用没有自动同步。不需要,因为只有一个线程可能尝试构造一个给定的线程局部对象。
根据 该存储期限参考 a thread_local
变量。
...在线程开始的时候被分配,在线程结束的时候被反分配。
所以,是的,当线程结束时,这个变量的生命期是 thread_local
变量也结束,这意味着那些特定的实例将被销毁。