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的。

相关内容

热门资讯

出口退税申报办理更加高效 (来源:法治日报)转自:法治日报本报讯 记者刘欣 国家税务总局近日发布《出口业务增值税和消费税退(免...
俄美乌还有哪些问题没谈拢 (来源:法治日报)转自:法治日报□ 本报驻俄罗斯记者 史天昊  当地时间1月23日至24日,由俄罗斯...
星德胜科技(苏州)股份有限公司... 证券代码:603344 证券简称:星德胜 公告编号:2026-002星德胜科技(苏州)股份有限公司关...
农银汇理基金管理有限公司旗下部... 为更好地满足投资者的理财需求,进一步提升客户体验,根据农银汇理基金管理有限公司(以下简称“本公司”或...
个人增值税按次纳税起征点提至千...     北京青年报记者昨天从国家税务总局获悉,近日,税务总局配套制发了《关于起征点标准等增值税征管事...