当前位置: 首页 > news >正文

【底层机制】thread_local 变量的初始化时机和生命周期

核心概念定义

  • 初始化(Initialization): 指变量被赋予其初始值的过程。对于类对象,就是调用其构造函数。
  • 生命周期(Lifetime): 指变量存在的时间段。在其生命周期开始后、结束前,你可以安全地使用它。
  • 线程存储期(Thread Storage Duration)thread_local变量的存储期。其生命周期与它所属的线程一样长。

一、初始化时机 (Initialization Timing)

thread_local变量的初始化时机取决于它是如何被声明的,主要分为三种情况:

1. 静态初始化 (Static Initialization)

如果变量满足**常量初始化(Constant Initialization)**的条件,它会在程序加载的早期(在任何动态初始化之前,在任何线程启动之前)由主线程(main thread)进行初始化。

条件: 初始化器是一个常量表达式。

// 静态初始化(常量初始化)
thread_local int x = 42; // 字面量是常量表达式
thread_local const int bufSize = 1024 * 8; // 常量表达式
thread_local const char* name = "Main"; // 字符串字面量地址是常量struct MyType { int i; constexpr MyType(int n) : i(n) {} };
thread_local MyType const_obj(100); // constexpr构造函数

特点

  • 发生在主线程中。
  • 发生在任何其他线程启动之前
  • 零开销,通常发生在编译期或程序加载期。
  • 后续每个新线程创建时,其对应的thread_local变量副本会直接从主线程的初始映像中“拷贝”这些已初始化的值(对于POD类型是bitwise copy,对于非POD类型可能会再次调用构造函数,但标准保证行为如同静态初始化)。
2. 动态初始化 (Dynamic Initialization) / 延迟初始化 (Lazy Initialization)

如果变量不满足常量初始化的条件,它的初始化将是动态的,并且是线程局部的延迟的

条件: 初始化器不是常量表达式(例如,包含函数调用、非常量值等)。

int get_value() { return 10; }// 动态初始化(延迟初始化)
thread_local int y = get_value(); // 函数调用,非常量表达式
thread_local std::string s = "Hello"; // std::string的构
http://www.dtcms.com/a/354071.html

相关文章:

  • Spring Retry Spring 生态系统优雅的重试组件
  • 浏览器网页路径扫描器(脚本)
  • SQL优化:SQL模拟Split二维数组
  • Linux 基础开发工具
  • django-redis 使用类实现和使用
  • React(面试)
  • JUC之异步编程理论总结
  • 实现基于数据库 flag 状态的消息消费控制
  • 【docker】P1 虚拟化与容器化
  • 全球协作无障碍:cpolar+Nextcloud实现跨国文件共享
  • 通过远程桌面横向移动(破解凭证)
  • 【51单片机】【protues仿真】 基于51单片机出租车计价器系统
  • 三轴云台之动态性能篇
  • 数字化时代催生变革,楼宇自控系统成为建筑管理新潮流的引领者
  • ESP32S3:开发环境搭建、VSCODE 单步调试、Systemview 分析任务运行情况
  • 北斗导航|接收机自主完好性监测算法综述
  • 【C++】类和对象 --- 类中的6个默认成员函数
  • CAS 浅析
  • 视觉语言模型应用开发——Qwen 2.5 视觉语言模型的零样本学习能力在多模态内容审核中的实践研究
  • 把CentOS 7默认yum源改成腾讯云镜像
  • 阿里云——云存储与数据库服务
  • RustFS架构解密:零GC设计如何实现12μs级存储延迟?
  • 【lucene】SpanNearQuery中的slop
  • 【lucene】SpanFirstQuery的end参数
  • 【Python】包管理,弄明白import,package,module
  • 复杂网络环境实测:主流云VR产品性能对比——平行云LarkXR突破网络限制 引领云VR技术新高度
  • 记住密码管理器
  • 在Eclipse中配置Tomcat
  • 终端美化:Windows11 下 安装 WSL 并使用好看的的 zsh 主题
  • 【图论】最短路算法