//deepfuture.iteye.com 深未来技术
#include <pthread.h>
#include <stdio.h>
struct mydata{
int x;
char c[4];
};
pthread_t pthreada,pthreadb;
pthread_key_t datakey;//每个进程创建一次,不同的线程,同样名字的键指向不同的地方
//deepfuture.iteye.com 深未来技术
void *cleanup_mydata(void *dataptr){//删除键时调用的
free((struct mydata*)dataptr);
}
void anum1(){
int rc;
struct mydata *mdata=(struct mydata*)malloc(sizeof(struct mydata));
mdata->x=1;
mdata->c[0]='a';
mdata->c[1]='\0';
rc=pthread_setspecific(datakey,(void*)mdata);//设置键指向的值,注意这个mdata为值的内存,必须使用指针的方式指向内存
sleep(1);
struct mydata *mmdata=(struct mydata*)pthread_getspecific(datakey);//取出键指向的值,注意这个mdata为值的内存,必须使用指针的方式指向内存
printf("-%d-%s\n",mmdata->x,mmdata->c); //deepfuture.iteye.com 深未来技术
fflush(stdout);
}
void bnum2(){//deepfuture.iteye.com 深未来技术
int rc;
struct mydata *mdata=(struct mydata*)malloc(sizeof(struct mydata));
mdata->x=2;
mdata->c[0]='b';
mdata->c[1]='\0';
rc=pthread_setspecific(datakey,(void*)mdata);//设置键指向的值,注意这个mdata为值的内存,必须使用指针的方式指向内存
sleep(1);
struct mydata *mmdata=(struct mydata*)pthread_getspecific(datakey);//取出键指向的值,注意这个mdata为值的内存,必须使用指针的方式指向内存
printf("-%d-%s\n",mmdata->x,mmdata->c);
fflush(stdout);
}
int main(void){
int rc;
rc=pthread_key_create(&datakey,cleanup_mydata);//为键删除时的清理函数
pthread_create(&pthreada,NULL,anum1,NULL);
pthread_create(&pthreadb,NULL,bnum2,NULL);
sleep(3);//deepfuture.iteye.com 深未来技术
pthread_join(pthreada,NULL);
pthread_join(pthreadb,NULL);
rc=pthread_key_delete(datakey); //仅删除键,但不删除值指向的内存,线程终止调用用户自定义的删除函数,本例中为cleanup_mydata
}
分享到:
相关推荐
Linux操作系统中的栈是一种重要的数据结构,尤其在内存管理、函数调用以及多任务处理中扮演着至关重要的角色。在Linux系统中,栈可以分为进程栈、线程栈、内核栈以及中断栈。 首先,我们需要了解栈(Stack)的基本...
FOCAS开发包提供了丰富的API和文档,使得开发者可以使用C、C++、Python等语言编写程序,实现与FANUC数控系统的交互。这些API涵盖了从基本的NC程序读取、参数设置,到复杂的机床状态监控、实时数据采集等功能。例如,...
- **C语言基础**:学习C语言的基本语法、数据类型、控制结构等内容,为后续的嵌入式编程打下坚实的基础。 - **嵌入式编程实践**:通过实际项目来加深对C语言的理解,例如编写简单的驱动程序、实现基本的输入输出操作...
- **I2C核心**:讨论Linux内核中支持I2C通信的核心组件。 - **总线事务**:解释如何通过I2C总线进行数据传输。 - **实例分析**:给出了EEPROM和实时时钟等设备的具体驱动实例。 - **硬件监控**:介绍如何使用LM-...
嵌入式Linux内核编程是将Linux操作系统与硬件紧密结合的过程,用于开发运行在微控制器、嵌入式设备或专用系统上的高效、定制化的操作系统。在本文中,我们将深入探讨嵌入式Linux内核编程的关键概念、技术和实践。 ...
嵌入式系统是指将计算机硬件和软件集成在一个或多个处理器上,形成一个专用的计算机系统,用于实现特定功能的产品或设备。这些系统通常具有高可靠性和实时性,广泛应用于消费电子、工业控制、汽车电子、航空航天等...
在Linux内核源代码中,双向循环链表是一种常用的数据结构,它广泛应用于各种场景,如进程就绪队列、专用内存缓冲管理队列、物理内存页面管理队列和定时器队列等等。这些队列中的元素尽管结点类型各异,但都可以看作...
在描述中提到的“线程专用数据TSD(Thread Specific Data)”是C语言中处理线程局部存储的一种方式,确保每个线程拥有自己的独立数据副本,不会互相干扰。TSD在多线程编程中非常关键,因为它允许数据安全地在各个...
目 录 第1章 引言 1 1.1 演进 1 1.2 gnu copyleft 2 1.3 kernel.org 2 1.4 邮件列表和论坛 3 1.5 linux发行版...451 23.2 下一步该做什么 452 附录a linux汇编 453 附录b linux与bios 457 附录c seq文件 461
根据提供的文件信息,我们可以将《博创2410开发板—LINUX实验指导书》中的主要内容归纳为以下几个重要的知识点: ### 1. 嵌入式Linux开发基础知识 #### 1.1 嵌入式Linux简介 - **定义**:嵌入式Linux是一种针对...
NiftyReg 安装指南 - Linux 和 MacOs NiftyReg 是一个功能强大的图像注册工具,广泛应用于医疗图像处理领域。在本指南中,我们将详细介绍如何在 Linux 和 MacOs 系统上安装 NiftyReg。 安装前的准备 在安装 ...
标题中的"S3C2440 + Linux2.6的几个驱动小例子"是指基于S3C2440微处理器和Linux内核版本2.6的设备驱动程序示例。S3C2440是一款由Samsung制造的ARM9处理器,常用于嵌入式系统设计,如开发板和工业设备。Linux内核2.6...
嵌入式Linux开发基础知识是学习嵌入式系统技术的重要组成部分,随着后PC时代的到来,嵌入式系统技术在信息家电、数据网络、工业控制、医疗卫生、航空航天等领域得到了广泛应用。本实验手册详细介绍了UP-Magic2410...
因此,"clk-axi-clkgen.c"的实现需要遵循Linux驱动程序模型,确保与内核的兼容性和稳定性。 在设计AXI时钟发生器驱动时,开发人员需要考虑以下关键点: 1. **同步和异步时钟域**:AXI总线可能涉及多个时钟域,驱动...
ext4是ext3的改进版,并且继承了ext2、ext3家族的生态,它在单线程元数据性能上表现优秀。而XFS是一个为大数据设计的文件系统,最初诞生于SGI的IRIX操作系统,并且已被移植到Linux。XFS设计上支持大量的并发操作,...
嵌入式Linux应用开发涉及系统I/O、多进程/多线程编程、网络编程以及数据库编程等内容。这部分是嵌入式软件开发的核心,能够处理复杂的系统交互和数据处理任务。 #### 四、C++面向对象编程 随着嵌入式系统的复杂度...