thread_local变量构造、销毁的标准强制要求及线程关联问题问询
C++ thread_local变量的构造与销毁规则
构造规则
- 标准强制要求
thread_local对象的构造必须由其关联的线程执行。- 对于静态存储期的
thread_local变量,要么在线程启动阶段由该线程完成构造(满足常量初始化条件时),要么在该线程首次访问变量时触发构造。无论哪种情况,执行构造操作的主体都是该变量绑定的线程,构造时获取的线程ID必然属于关联线程。
- 对于静态存储期的
销毁规则
- 标准明确规定,
thread_local变量的销毁必须发生在关联线程的执行上下文内,也就是你所说的“濒死线程的计算时间内”:- 析构函数执行时,当前线程的ID就是该变量关联的线程ID;
- 销毁动作一定会在线程最终终止前完成,不会等到线程完全退出后才执行。
- 额外说明:线程内的
thread_local对象销毁顺序是构造顺序的逆序,和全局静态变量的销毁逻辑一致,但仅作用于当前线程的变量集合。
内容的提问来源于stack exchange,提问作者albert
相关产品推荐
相关产品推荐

