linux 线程私有数据

linux下C语言多线程(二)线程的私有数据 一. 概念及作用 在单线程程序中,我们经常要用到"全局变量"以实现多个函数间共享数据。在多线程环境下,由于数据空间是共享的,因此全局变量也为所有线程所共有。现在有一全局变量,所有线程都可以使用它,改变它的值。而如果每个线程希望能单独拥有它,那么就需要使用线程存储了。表面上看起来这是一个全局变量,所有线程都可以使用它,而它的值在每一个线程中又是单独存储的。这就是线程存储的意义。这样的数据结构可以 阅读详情
  • Linux线程私有数据(Thread-Specific Data,TSD)是指在多线程程序中,每个线程都可以拥有自己的私有数据,这些数据对于其他线程是不可见的。在Linux中,可以使用线程特定数据(Thread-Specific Data,TSD)来实现线程私有数据。

线程特定数据是一种机制,它允许每个线程都拥有自己的私有数据。在Linux中,可以使用pthread_key_create函数创建线程特定数据键,使用pthread_setspecific函数将数据与键关联起来,使用pthread_getspecific函数获取与键关联的数据。

  • 类似于errno,不是全局变量,因为多个线程同时访问的话可能出现资源同步问题,私有数据是一键对多值,每个线程可以根据同一个key,设置自己的数据,也可以通过key对数据进行获取
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
pthread_key_t key;

struct student{
    int id;
    char nm[20];
}student_def;

void child1(void* arg)
{
    struct student stu_tmp;
    memset(&stu_tmp, 0x00, sizeof(student_def));
    stu_tmp.id=10;
    strcpy(stu_tmp.nm, "hello");
    pthread_setspecific(key, (void*)&stu_tmp);
    printf("child1:id=%d, nm=%s\n", ((struct student*)pthread_getspecific(key))->id, 
                        ((struct student*)pthread_getspecific(key))->nm);
}

void child2(void* arg)
{
    struct student stu_tmp;
    memset(&stu_tmp, 0x00, sizeof(student_def));
    stu_tmp.id=20;
    strcpy(stu_tmp.nm, "world");
    pthread_setspecific(key, (void*)&stu_tmp);
    
    printf("child2:id=%d, nm=%s\n", ((struct student*)pthread_getspecific(key))->id, 
                        ((struct student*)pthread_getspecific(key))->nm);
}

int main()
{
    pthread_t ptid1;
    pthread_t ptid2;
    
    pthread_key_create(&key, NULL);
    pthread_create(&ptid1, NULL, (void*)child1, NULL);
    pthread_create(&ptid2, NULL, (void*)child2, NULL);
    
    pthread_join(ptid1, NULL);
    pthread_join(ptid2, NULL);
    pthread_key_delete (key);

    return 0;
}
ss524v100 调试cvbs输出 启用视频层3 dev2 对应 layer3在vdec与vo绑定的时候(不需要经过vpss),不能绑定错误,以下是绑定的程序。 阅读详情

相关推荐

昇腾910安装驱动出错,降低Centos7.6的内核版本

Centos7.6 启动内核修改,解决昇腾910安装驱动错误的问题。

深蓝 3300

Linux系统编程——线程概述、线程控制和线程私有数据

在许多经典的操作系统教科书中,总是把进程定义为程序的执行实例,它并不执行什么, 只是维护应用程序所需的各种资源,而线程则是真正的执行实体。在一个进程中的多个执行路线叫做线程。为了让进程完成一定的工作,进程必须至少包含一个线程。线程又叫轻量级进程(LWP)。线程会共享进程的一些资源,也有一些资源是线程独立拥有的。但是不同进程的线程是不共享资源的。【共享】:代码区、数据区、堆区(注意没有栈区)、环境变量和命令行参数、文件描述符、信号处理函数、当前目录、用户 ID 和组 ID 等。

qq_74811378的博客 1468

Switch游戏安装新思路:抛弃Commander One,试试这款免费的Mac神器OpenMTP

本文介绍了Mac用户安装Switch游戏的新选择——免费工具OpenMTP,对比收费软件Commander One,OpenMTP在MTP连接稳定性和文件管理上更具优势。详细解析了OpenMTP的安装配置、核心功能及实战操作,帮助用户高效完成游戏安装,特别适合已破解并安装DBI的Switch用户。

weixin_30664051的博客 583

《Linux C编程实战》笔记:线程私有数据

在多线程环境下,进程内的所有线程共享进程的数据空间,因此全局变量为所有线程共有。在程序设计中有时需要保存线程自己的全局变量,这种特殊的变量仅在某个线程内部有效。如常见的变量errno,它返回标准的出错代码。errno不应该是一个局部变量,几乎每个函数都应该可以访问它;但它又不能作为是一个全局变量,否则在一个线程 里输出的很可能是另一个线程的出错信息,这个问题可以通过创建线程的私有数据(Thread-specific Data,或TSD)来解决。

ouliten的博客 643

告别浏览器崩溃!EasyPlayer.js长时间播放FLV视频内存泄漏排查指南

本文针对EasyPlayer.js长时间播放FLV视频导致浏览器内存泄漏和崩溃的问题,提供了一套系统性排查与解决方案。核心策略包括将视频编码从H.265转为H.264以降低解码压力,以及将传输协议从HTTP-FLV切换至WebRTC以优化资源管理。文章还详细介绍了播放器实例生命周期管理、浏览器开发者工具监控等精细化排查手段,帮助开发者实现稳定、长时间的多路视频播放。

weixin_29229055的博客 174

告别反复格式化!用Ventoy制作2025年终极启动盘,Windows/Linux/macOS一网打尽

本文详细介绍了如何使用Ventoy制作2025年终极多系统启动盘,彻底告别反复格式化U盘的烦恼。Ventoy通过创新的引导加载器架构,允许用户在一个U盘内同时存放并直接启动Windows、Linux、macOS等多种系统镜像和WePE等维护工具,实现真正的非破坏性管理和极高的U盘利用率。文章涵盖从安装配置、镜像库构建到安全启动设置等全流程实战指南。

weixin_29280219的博客 242

【Linux】Linux线程私有数据

线程私有数据 在单线程程序中,函数经常使用全局变量或静态变量,这是不会影响程序的正确性的,但如果线程调用的函数使用全局变量或静态变量,则很可能引起错误。因为这些函数使用的全局变量和静态变量无法为不同的线程保存各自的值,而当同一进程内的不同线程几乎同时调用这样的函数时就可能会有问题发生。 而解决这一问题的一种方式就是使用线程私有数据。线程私有数据采用了一种被称为一键多值的技术,即一个键对应多个数...

Yngz_Miao的博客 8976

杰理AC696N系列芯片,烧录的时候烧录器连接上芯片之后电脑显示无法识别该设备,该怎么解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1713

pthread线程私有数据

  进程内所有的线程共享地址空间,任何声明为静态或外部的变量,或在进程堆声明的变量都可以被进程内的所有线程读写。 static,extern,或堆变量的值是上次线程改写的值 一个线程真正拥有的唯一私有存储时处理器寄存器。甚至栈地址也能被共享,寄存器和“私有”堆栈都不能代替非线程代码中使用的持久静态存储   当线程需要有个私有变量时,首先决定所有线程时候共享相同的值,或线程是否该有...

weixin_30480075的博客 416

第3讲:单端传输线的时域TDR仿真(基于实战的第一次仿真视角切换)

本文为CST仿真系列教程的第3讲,主要介绍传输线阻抗(TDR)的两种仿真方法:基于S参数的频域计算和基于高斯脉冲的时域计算。文章详细演示了在CST PCB Studio中修改电容参数、设置TDR仿真参数(包括截止时间和采样点数)的操作步骤,并通过对比实验展示TVS寄生电容对阻抗曲线的影响。最后将两种TDR方法的结果进行对比,验证了两种方法的一致性。本教程适合硬件工程师通过时域波形直观分析传输线阻抗特性,是信号完整性分析的重要技能。

一只豌豆象的博客 228

ZYNQ 7020 之 FPGA知识点重塑笔记一——串口通信

通信方式一般分为串行通信和并行通信。并行通信是指多比特数据同时通过并行线进行传送。这种传输方式通信线多、成本高,故不宜进行远距离通信,通常传输距离小于 30 米。串行通信是指数据在一条数据线上,一比特接一比特地按顺序传送的方式。这种运输方式通常节省传输线,大大降低使用成本,但数据传送速度慢。综上可知,串行通信主要应用于长距离、低速率的通信场合。本次实验我们主要讲解下串行通信。串行通信一般有2种通信方式:同步串行通信和异步串行通信。同步串行通信。

m0_51430584的博客 3094

深入剖析Linux线程特定数据

深入剖析Linux线程特定数据

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 3277

3D Slicer学习记录(4)-PLUSapp连接双目相机Intel Realsense

plusapp是基于openIGTLink协议的免费的开源库和应用程序API接口,用于数据采集、预处理、校准和实时流成像、位置跟踪和其他传感器数据。这里以intel realsense双目相机为例详细的演示整个图像流导入到3D Slicer的流程。

weixin_39090239的博客 1346

linux线程私有数据

今天在看线程的私有数据时,一直想找个例子,实际的验证下,用数据告诉自己:"对,就是那样的,那就是TSD“,于是乎我看到了这个例子 http://www.ibm.com/developerworks/cn/linux/thread/posix_threadapi/part2/,不得不说IBMdeveloperworkshop这的很好,有很多非常优秀的文章,至于原创与否我没有考证,不下结论,于是乎下

写代码的小孩 2365

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Linux线程私有数据

Linux线程特定数据

weixin_43728590的博客 476

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Linux线程私有数据Thread-specific Data(TSD) 详解

Linux线程私有数据Thread-specific Data(TSD) 详解。本文将详细介绍pthread_key的用法以及pthread_key的原理。pthread_key在《ntyco协程》中,以及后续文章《try catch的实现》都有用到。跟我一起学习的读者务必搞懂原理。......

清风 4495

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

linux c线程控制—私有数据和线程同步

线程这一章,着实不好理解,写上一篇博客时,我还没这么想, 今天做了几道关于线程的题,觉得还是不行呀,还是乖乖再来一遍吧。 私有数据: 线程同步 条件变量 异步信号 1、私有数据 为什么要有线程私有数据呢? 我们知道在多线程环境下,进程内的所有线程共享进程的数据空间,所以全局变量为所有线程共有,但是在程序设计的时候有时需要保存线程自己的全局变量,例如:变量errno:返回标...

tiandc的博客 635

Linux多线程基础学习(八)私有数据

在进程内的所有线程共享相同的地址空间,任何声明为静态或外部的变量,或在进程堆声明的变量,都可以被进程所有的线程读写。那怎样才能使线程序拥有自己的私有数据呢。 posix提供了一种方法,创建线程键。 1.为什么需要线程私有数据:       原因一:有时候需要维护基于每个线程的数据,用线程ID作为索引。因为线程ID不能保证是小而连续的整数,所以不能简单的分配一个线程数据数组,用线程ID作为数组

Ryan Smith的专栏 1182

多线程4——线程私有数据(linux)

多线程4——线程私有数据(linux)

Jerry的博客 367

linux 线程私有数据之一键多值技术TSD池

linux 线程私有数据之 一键多值技术 进程内的所有线程共享进程的数据空间,因此全局变量为所有线程所共有。但有时线程也需要保存自己的私有数据,这时可以创建线程私有数据(Thread- specific Date)TSD来解决。在线程内部,私有数据可以被各个函数访问,但对  linux 线程私有数据之 一键多值技术 进程内的所有线程共享进程的数据空间,因此全局变量为所有线程所共有。但有

晴天的专栏 2698

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

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

weixin_35033082的博客 1115

Linux--线程的私有数据如何创建销毁和读取

Linux--线程的私有数据如何创建销毁和读取线程的私有数据私有数据的创建销毁以及读取私有数据的定义pthread_key_create参数:int pthread_key_delete参数:void *pthread_getspecific参数pthread_setspecific参数:demo运行效果 线程的私有数据 我们知道,Linux中多线程之间是共享内存的,那么一个全局变量更改了会影响别的线程,那么如何定义线程自己的私有数据呢? TSD私有数据,同名但是不同内存地址的私有数据结构 私有数据的创建销

一只青木呀 563

ZT linux 线程私有数据之 一键多值技术

这个原作者的这个地方写错了 且他举的例子非常不好。最后有我的修正版本 pthread_setspecific(key, (void *)&my_errno); linux 线程私有数据之一键多值技术TSD池 2012-09-15 16:22:08 分类: LINUX linux 线程私有数据之 一键多值技术 ...

weixin_30542079的博客 104

linux线程私有数据的保护

来自于:http://www.cppblog.com/prayer/archive/2009/07/05/89286.html   linux下的线程真是很有趣,各种在windows编程里看不到的技巧在这里尽显无余。在一个进程里有许多的线程,这些线程共享进程里的所有资源。包括数据空间,所以全局变量是为所有的线程所共享的。但如果线程里的全局变量为所有的线程所共享会出现一些问题。比如如果代码量很大

lieye_leaves的专栏 764

Linux学习笔记:线程私有数据

在学习线程操作的过程中,我一直对线程私有数据的作用很困惑,不知道它到底有什么作用,但经过一段时间的探索后,我总结了一部分关于线程私有数据的用法,如果有不对或者不够详细的地方,请指出。 线程私有数据的实现: 线程的私有数据采用了一种被称为 "一键多值" 的技术,即一个键对应多个数值。 操作线程私有数据的函数主要有4个: 1> pthread_key_create();

436

linux学习之十五---多线程私有数据

linux多线程 私有数据 在多线程环境下,进程内的所有线程共享进程的数据空间,因此全局变量为所有线程共有。在程序设计中有时需要保存线程自己的全局变量,这种特殊的变量仅在某个线程内部有效。 线程私有数据采用立一种被称为一键多值的技术,即一个键对应多个数值。访问数据都是通过键值来访问,好像是对一个变量进行访问,其实是在访问不同的数据。使用线程私有数据时,首先要为每个线程数据创建一个相关联的键。在

lanzh_ 931
上一篇: 一个链表不知道头结点,有一个指针指向其中一个结点,请问如何删除这个指针指向的结点。
下一篇: linux 多线程面试题
最后冰吻free
博客等级 码龄12年 121粉丝 371原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值