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

C++ thread_local 存储类

目录标题

  • 概述
  • 实现场景
  • 总结


概述

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

http://www.lryc.cn/news/34422.html

相关文章:

  • 冥想第七百二十三天
  • zookeeper 集群配置
  • 怎么用消息队列实现分布式事务?
  • 什么蓝牙耳机佩戴舒适?2023长时间佩戴最舒适的蓝牙耳机
  • 刮刮乐--课后程序(Python程序开发案例教程-黑马程序员编著-第4章-课后作业)
  • LeetCode 全题解笔记:两数相加(02)
  • 网络工程师面试题(面试必看)(1)
  • MySQL基础操作指南:第一篇
  • C#中包含?的运算符使用汇总
  • 剑指 Offer 56 - I. 数组中数字出现的次数
  • MySQL事务日志
  • 极速开发,无限可能,2023网易低代码大赛全新赛季启动
  • C++ | 详细介绍缺省参数的作用
  • 【sdx62】sdx62分析代码中Serial Number的寄存器地址及获取Serial Number的方法
  • MATLAB的快速入门
  • Python中赋值、引用、深浅拷贝的区别和联系
  • 春招冲刺(十一):前端面试之网络总结
  • Mybatis插件
  • 计算机学科专业基础综合科目(408)
  • centos7安装教程
  • Kafka 重平衡
  • PTA:L1-022 奇偶分家、L1-023 输出GPLT、L1-024 后天(C++)
  • IDEA插件开发入门.02
  • 如何用 23 种编程语言说“Hello World”
  • 【Linux快速入门】文件目录操作
  • 字体反爬慢慢总结破解方式
  • Kafka 位移提交
  • kubernetes--监控容器运行时:Falco
  • HTTP协议详解(上)
  • java性能-原生内存-内存分析