C++ thread_local 存储类
创始人
2024-05-30 20:24:38

目录标题

  • 概述
  • 实现场景
  • 总结


概述

thread_local指示对象拥有线程存储期。也就是对象的存储在线程开始时分配,而在线程结束时解分配。每个线程拥有其自身的对象实例。唯有声明为 thread_local 的对象拥有此存储期。 thread_local 能与 static 或 extern 结合一同出现,以调整链接(分别指定内部或外部链接),详细的可以查阅:存储类说明符 - cppreference.com

使用 thread_local 说明符声明的变量仅可在它在其上创建的线程上访问。 变量在创建线程时创建,并在销毁线程时销毁。 每个线程都有其自己的变量副本。
thread_local 说明符可以与 staticextern 合并。这将影响变量的链接属性。


实现场景

全局变量

  • 每个线程都有自己单独的x副本,互不干预。

  • 局部变量
  • 线程存储期的变量都是和线程绑定的,所以只有第一次声明时被赋值。可以理解为线程专用的static变量。不过变量的作用域依然是在本身的作用域内。

  • 类对象
  • 与局部变量的情况相同,创建的实例相对于thread是static的,一般情况要求我们:thread_local对象声明时赋值.

类成员变量

  • thread_local作为类成员变量时必须是static的.
  • thread_local作为类成员时也是对于每个thread分别分配了一个,而static则是全局一个.

总结

本质上thread_local修饰后仍然是一个变量,我们依旧能够使用取地址操作者通过引用的方法传递给其他线程对其进行修改,
thread-local storage 和 static(或者说global) 存储很类似,每一个线程都将拥有一份这个数据的拷贝,thread_local对象的生命周期从线程开始时开始(对于全局变量),或者首先分配空间。当线程退出的时候对象析构;
一般在声明时赋值,在本thread中只执行一次。当用于类成员变量时,必须是static的。

相关内容

热门资讯

贵州馆亮相2026中国文化旅游... 转自:贵州日报 本报讯(记者 花俊辉)9月3日,以“深化文旅融合 智创美好生活”为主题的2026中国...
暑假带娃漂流一个落差让68岁阿... (来源:南京晨报)转自:南京晨报 暑假期间,漂流是不少家庭亲子出游的热门项目。孩子觉得刺激,...
启动专属在线服务平台 打造“创... (来源:南京晨报)转自:南京晨报 晨报讯(南京晨报/爱南京记者 陈彦)科技创新不仅强调在研发...
江苏出台补助方案 保障省属高校... (来源:南京晨报)转自:南京晨报 为深入落实《省政府办公厅关于印发省属高校学生宿舍提质扩容三...
侵华日军南京大屠杀遇难同胞纪念... (来源:南京晨报)转自:南京晨报 晨报讯(见习记者 王诗淇 南京晨报/爱南京记者 王洁馨 摄...