pthread中解决线程独享变量TSD

踩坑之路-线程私有数据 背景介绍 进程A 进程B 动态链接库 c.so d.so e.so; 进程A会加载c.so、d.so;进程B会加载c.so、d.so、e.so。------还会加载其它很多so,由于影响是E.so导致的,简化后就三个so了。 设备中存在进程A、进程B,进程A每次重启时,会产生core文件,产生core的位置在c.so,进程B不会出core文件。 定位过程 发现进程A出core的地方是c.so中的私有数据,发现私有数据是乱的,怀疑是初始化时有问题。 查看代码发现函数初始化私有数据时调用pthread 阅读详情

1、创建变量 pthread_key_t   key; (通常为全局变量,或者通过函数传参传递)。


2、用  int pthread_key_create(pthread_key_t *key, void (*destructor)(void*)) 在主进程中创建一个关键字(其实是个数组),用来存储各个线程中的私有变量。它的第一个参数key为指向键值的指针(即之前的变量key的地址),第二个参数为一个函数指针,如果指针不为空,则在线程退出时将以key所关联的数据为参数调用destr_function(),一般用于释放分配的缓冲区,如果key存储的只是局部/临时变量,不需要手动释放。


3、在各个线程中用malloc创建静态变量并用pthread_setspecific(key,(void *)a);将a直接强制转换为void *存储到key中,不涉及取地址。


4、待到需要使用存储的a时,使用pthread_getspecific( key ),获取得到的变量直接强制转换回去(如上⬆️  反过来)。


5、当线程消亡时,会调用到之前的 void (*destructor)(void*)函数,其中void *参数就是key中保存的值,也就是(void *)a,在这个函数里可以直接强制转换回去使用,通常可以用来释放malloc申请的静态变量空间。

【YOLOv11工业级实战】15. YOLOv11海洋监测实战:珊瑚礁健康评估(水下图像增强|机器人搭载) 摘要:本文针对珊瑚礁健康评估的海洋监测需求,基于YOLOv11提出解决方案,聚焦水下色偏、悬浮物干扰、珊瑚形态复杂三大难题。引用全球珊瑚礁监测网络(GCRMN)标准,采用CoralNet数据集,通过Jaffe-McGlamery物理模型引导增强与悬浮物去除算法,在浑浊水域(能见度<5m)实现87.3%的健康珊瑚识别率,藻类误判率低至7.2%。介绍了以BlueROV2水下机器人和Jetson AGX Orin为核心的部署方案,结合水下SLAM定位技术,实现珊瑚健康的实时评估与三维覆盖率计算。 阅读详情

相关推荐

SAP 批量处理分包事后调整:BAPI_GOODSMVT_CREATE 关键参数与避坑指南

本文详细解析了SAP系统中使用BAPI_GOODSMVT_CREATE进行分包事后批量调整的关键参数配置与常见错误排查。重点介绍了GOODSMVT_CODE设置为'07'的必要性、GOODSMVT_ITEM结构体的正确配置方法,以及如何避免M7384、M7386等常见错误,帮助用户高效处理分包业务中的数量调整问题。

weixin_29276847的博客 565

pthread线程私有数据TSD 几点测试结果

更加详细的内容查看man手册或百度,这里只是几个实际测试的结果。仅代表实验现象,并不考虑实现原理。 pthread_key_t key可以定义为全局变量,全局变量属于所有线程共有的。在不同的线程中可以用pthread_setspecific为key绑定不同的实际数据,在每个线程中key指向的实际数据是线程私有的。 int pthread_key_create(pthread_key_t *key, void (*destructor)(void*)); create不是创建key,而是为key注册一

weixin_44986556的博客 304

3 种 VLA 模型动作表示方案对比:RT-2 离散化 vs π0 流匹配 vs HybridVLA 混合架构

本文深入对比了三种VLA模型动作表示方案:RT-2离散化、π0流匹配和HybridVLA混合架构。分析了各自的技术原理、优势与局限性,并提供了应用场景选择指南,帮助研究者在具身智能领域做出更优的技术选型决策。

weixin_29031161的博客 319

线程特定数据

线程特定数据也称线程私有数据,是存储和查询某个特定线程相关数据的一种机制。在分配线程特定数据之前,需要创建与该数据相关联的键,以用于获取对线程特定数据的访问。使用函数 pthread_key_create 可创建一个键,而对所有的线程,都可以通过 pthread_key_delete 来取消键与线程特定数据值之间的关联关系。 [code="c"] #include int pthr...

aisxyz 341

centos-stream-9上安装nvidia驱动和cuda-toolkit

centos-stream-9上安装nvidia驱动和cuda-toolkit

qq_19072921的博客 3020

华硕三频万兆分布式路由组网实战:从AiMesh 2.0到全屋Wi-Fi 6覆盖

Mesh组网是解决大户型Wi-Fi覆盖难题的主流方案,其核心原理是通过多个节点构建网状网络,实现设备间的无缝漫游。在技术层面,Wi-Fi 6标准、三频设计(包括专属回程频段)和有线回程等技术,共同提升了网络的带宽、稳定性和抗干扰能力。这些技术的工程价值在于,能够为多设备并发、高带宽应用(如4K/8K流媒体、在线游戏、内网文件高速传输)提供可靠支撑。具体到应用场景,例如利用华硕AiMesh 2.0系统,配合三频万兆分布式路由器,可以实现智能的设备连接与负载均衡。通过合理规划节点位置、优先采用有线回程,并进行Q

weixin_34054866的博客 431

Linux多线程之pthread_key_create()

本文介绍了pthread_key_create()函数在多线程编程中的基本概念、功能和使用方法。通过了解pthread_key_create()的使用,可以更好地管理多线程编程中的线程特定数据,避免数据竞争和其他相关问题的发生。在使用pthread_key_create()函数时,需要注意以下几点:1 键的范围pthread_key_t类型的键的范围通常是有限的,具体取决于系统的实现。因此,在创建和使用键时,应确保键的数量不会超出系统限制。2 线程特定数据的初始化。

Lid_23的博客 2468

Buildroot RK3568系统中更改GPU驱动为:panfrost

1:Kernel中开启Panfrost 2:更新mesa 到mesa-24.0.2 3:查看/proc/interrupts 中的panfrost 中断 4:LInux启动日志 5:查看GPU负载

OpenWrt/WLAN/驱动/Android/嵌入式开发总结 2078

Java是如何通过ThreadLocal类来实现变量的线程独享

一 概述 Java中,如果一个变量要被多线程访问,可以使用volatile关键字将它声明为“易变的”;如果一个变量只要被某个线程独享时,我们可以通过java.lang.ThreadLocal类来实现线程本地存储的功能。每一个线程的Thread对象中都有一个ThreadLocalMap对象,这个对象存储了一组ThreadLocal<?>的实例化对象为键,以本地线程变量为值的K-V值对,ThreadLocal对象就是当前线程的ThreadLocalMap的访问入口,每一个ThreadLocal对象

calm_encode的博客 1385

Node-RED系列(二九):使用slider与chart节点来实现双折线时间序列图

今天教使用dashboard的chart组件和slider组件来是实现一个双线的折线图。效果如下 拖动顶部的电量和水量,低下的图表会实时显示时间和值之所以做这个模拟案例,是将教 大家使用chart节点和slider节点先说一下slider节点,该节点是一个滑块节点,可以接受上一节点的 msg.payload,作为滑块的值, slider必须设置最大值和最小值。且不能动态设置。 此外当用户拖动slider滑块,改变值时,该节点会向下传递当前值 以属性payload装载。在说一下chart节点,该节点可以用于

知无涯 4967

vue3 - 详细实现内网使用离线高德地图功能,在vue3中无需网络离线使用高德地图相关功能,高德地图如何离线加载详细教程(内网部署及使用),提供最新完整的瓦片资源下载及相关工具(示例代码,一键复制)

vue3,高德地图,离线使用高德地图,高德地图瓦片官方下载,内网使用高德地图离线无网络,断网情况下使用高德地图,vue离线高德地图教程,内网部署高德地图,无需联网离线使用,vue3+ts实现离线高德地图 内网离线高德地图,如何在高德地图Vue3项目中下载离线地图,地图加载不出来,不显示怎么办,内网使用离线高德地图加载失败问题,vue3实现离线地图+高德瓦片,vue3高德离线地图,如何使用离线高德地图和自定义地图样式,高德离线地图的下载,怎么下载高德地图瓦片,一键把所有瓦片都下载下来,离线加载,内网部署,离线

✅ 精选推荐文章 1万+

linux多线程:tls的实现方式

在Linux系统中使用C/C++进行多线程编程时,我们遇到最多的就是对同一变量的多线程读写问题,大多情况下遇到这类问题都是通过锁机制来处理,但这对程序的性能带来了很大的影响,当然对于那些系统原生支持原子操作的数据类型来说,我们可以使用原子操作来处理,这能对程序的性能会得到一定的提高。那么对于那些系统不支持原子操作的自定义数据类型,在不使用锁的情况下如何做到线程安全呢?本文将从线程局部存储方面,简单讲解处理这一类线程安全问题的方法。 1、数据类型 在C/C++程序中常存在全局变量、函数内定义的静态变量以及

4393

Python计算时间差的方法

使用datetime模块是Python内置的方法,使用timedelta对象可以更精确地计算时间差,而使用dateutil库则提供了更为灵活和方便的操作方式。我们可以使用datetime模块中的datetime类来表示一个具体的日期和时间,并进行相应的运算。在Python中,我们经常需要计算日期和时间之间的差异,例如计算两个日期之间的天数、小时数、分钟数等。Python提供了多种方法来计算时间差,下面我们将介绍其中的几种常用方法,并附上相应的源代码。在上面的代码中,我们使用了dateutil库中的。

学习使你进步。 2084

线程安全存储以及pthread_getspecific/pthread_setspecific

最近阅读一份linux的线程代码时,看到了一套函数,pthread_getspecific/pthread_setspecific。光从名字上,完全无法理解出他们到底是干啥的,结合代码来看,也不是很清楚。于是就去百度。可是,百度来百度去,优快云来优快云去,反反复复找了不少资料,却始终没能完全理解透彻。感觉大家都是从同一份博客里抄来抄去的,甚至连其中的错误都照抄了,不但没能解答我的疑惑,反而还带来了其他的问题。 题外话一:这里实在想吐槽一下百度的学术资料搜索能力,跟人家google比,实在是差太多了,

键盘的起始页 903

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Pthread - 线程特定数据(thread-specified data)

Pthread - 线程特定数据(thread-specified data)在 Pthread 中,线程特定数据(thread-specified data,以下简称 TSD)是绑定由pthread_key_create()函数创建的 key 的属于调用线程自身的数据。简单地说就是一个全局变量可以被多个线程访问,但是在每个线程中该全局变量指向由本线程设定的值,而且每个线程都可以通过该全局变量访问到

u010090316的博客 728

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Linux线程——条件变量(pthread_cond)详解

条件变量(Condition Variable)是线程同步的高级机制,它允许线程在特定条件不满足时主动让出CPU,直到其他线程改变条件并发出通知。条件变量总是与互斥锁配合使用,共同解决复杂的线程同步问题。与互斥锁绑定:必须与配合使用,避免竞争条件。线程阻塞与唤醒阻塞等待释放锁并挂起线程,直到被唤醒。唤醒机制:唤醒一个等待线程(由调度策略决定)。:唤醒所有等待线程。虚假唤醒:线程可能被意外唤醒(即使未收到信号),需用while循环检查条件。API功能描述关键参数返回值使用场景初始化条件变量。

weixin_45720999的博客 2101

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

多线程属性pthread_attr详解

Posix线程中的线程属性pthread_attr_t主要包括scope属性、detach属性、堆栈地址、堆栈大小、优先级。在pthread_create中,把第二个参数设置为NULL的话,将采用默认的属性配置。 线程属性结构如下: typedef struct { int detachstate; 线程的分离状态 int

cai_Grass的博客 1352

深入Phtread(三):线程的同步-Condition Variables

深入Phtread(三):线程的同步-Condition Variables    继续昨天的线程同步,条件变量(Condition Variables)是用于线程间,通信共享数据状态改变的机制。简介 条件变量的创建和销毁 等待条件变量 唤醒等待条件变量的线程简介    当线程互斥地访问一些共享的状态时,往往会有些线程需要等到这些状态改变后才应该

GAME-LAB(游戏开发,微信公众号:fury-programer) 4436

线程特定数据TSD及其实现原理

引言: 单线程C程序有两类基本数据:局部数据和全局数据。对于多线程C程序,添加了第三类数据:线程特定数据 那么为什么要引入线程特定数据呢?试想如果你的一个线程里面嵌套调用了很多函数,而你又想在这些函数之间使用一个 公共的变量,如果在单线程C中,我们是不是就要声明一个全局变量了呢?是的。但是我们想使声明的这个全局变量 只属于我们当前这个实例线程(同一个void *(*start_routin

Crazy_Bear 3059

线程存储(TSD)、pthread_key_t、pthread_key_create

pthread_key_t和pthread_key_create()详解

weixin_42639771的博客 296

Linux线程属性、线程局部变量总结

转自 http://blog.youkuaiyun.com/zsf8701/article/details/7842392 //线程属性结构如下: typedef struct {     int                   etachstate;      //线程的分离状态     int                   schedpolicy;     //线程调度策略    

le119126的专栏 6110

【C/C++多线程编程之八】pthread条件变量

多线程编程之条件变量      Pthread是 POSIX threads 的简称,是POSIX的线程标准。         互斥机制,包括互斥量【C/C++多线程编程之六】pthread互斥量,信号量【C/C++多线程编程之七】pthread信号量,互斥能很好的处理共享资源访问的协调问题,是多线程同步必不可少的机制。互斥机制也有其缺陷,当线程在等待共享资源满足某个条件,

Jiangwei的专栏 7821

pthread 条件变量

pthread条件变量

上善若水 4012

c 语言线程私有变量,linux下C语言多线程(二)线程的私有数据

一. 概念及作用在单线程程序中,我们经常要用到"全局变量"以实现多个函数间共享数据。在多线程环境下,由于数据空间是共享的,因此全局变量也为所有线程所共有。现在有一全局变量,所有线程都可以使用它,改变它的值。而如果每个线程希望能单独拥有它,那么就需要使用线程存储了。表面上看起来这是一个全局变量,所有线程都可以使用它,而它的值在每一个线程中又是单独存储的。这就是线程存储的意义。这样的数据结构可以由Po...

weixin_35033082的博客 1114

线程数据共享:pthread_getspecific和pthread_setspecific

pthread_getpecific和pthread_setspecific提供了在同一个线程中不同函数间共享数据即线程存储的一种方法。具体用法为: 1.调用pthread_key_create()来创建一个类型为pthread_key_t类型的变量 该函数有两个参数,第一个参数就是声明的pthread_key_t变量,第二个参数是一个清理函数,用来在线程释放该线程存储的时候被调用。该函数指针可...

疾风剑豪 897

pthread_setspecific函数与pthread_getspecific函数

函数原型:int pthread_setspecific(pthread_key_t key, const void *value); 功能:使用pthread_setspecific可以为指定线程特定数据键设置线程特定绑定 头文件:#include 由于pthread库非linux默认库,所以需要手动链接 -lpthread 形参:         key:需要关联的键

Crazy_Bear 1万+
上一篇: ubuntu下使用apue.3e报错
nmvbxcz
博客等级 码龄15年 4粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值