C++ 笔记 线程局部变量 thread_local

c++11 中添加了新的关键字thread_local,用来声明新的存储期(线程存储期变量),即线程局部变量。


程序中的所有对象拥有下列存储期之一:

1 自动存储期。对象的存储在外围代码块开始时分配,而在结束时解分配。除了声明为 static 、 extern 或 thread_local 的所有局部对象拥有此存储期。
2 静态存储期。对象的存储在程序开始时分配,而在程序结束时解分配。只存在对象的一个实例。所有声明于命名空间作用域(包含全局命名空间)的对象,加上声明带有 static 或 extern 的对象拥有此存储期。
3 线程存储期。对象的存储在线程开始时分配,而在线程结束时解分配。每个线程拥有其自身的对象实例。唯有声明为 thread_local 的对象拥有此存储期。 thread_local 能与 static 或 extern 一同出现,以调整链接。
4 (C++11 起)动态存储期。通过使用动态内存分配函数,由请求分配和解分配对象的存储。

thread_local修饰的变量具有如下特性:

  • 变量在线程创建时生成(不同编译器实现略有差异,但在线程内变量第一次使用前必然已构造完毕)。
  • 线程结束时被销毁(析构,利用析构特性,thread_local变量可以感知线程销毁事件)。
  • 每个线程都拥有其自己的变量副本。
  • thread_local可以和static或extern联合使用,这将会影响变量的链接属性。

关于链接属性,参考以下资料:

https://blog.csdn.net/luoshabugui/article/details/86699001

https://www.cnblogs.com/magicsoar/p/3840682.html

https://blog.csdn.net/Hansry/article/details/80207143


 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值