`
deepfuture
  • 浏览: 4398001 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:80054
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:69999
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:103291
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:285630
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:15001
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:67497
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:32099
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:45965
社区版块
存档分类
最新评论

LINUX-c-线程专用数据

阅读更多

//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操作系统中的栈是一种重要的数据结构,尤其在内存管理、函数调用以及多任务处理中扮演着至关重要的角色。在Linux系统中,栈可以分为进程栈、线程栈、内核栈以及中断栈。 首先,我们需要了解栈(Stack)的基本...

    FANUC系统FOCAS开发包 Linux与arm专用版本

    FOCAS开发包提供了丰富的API和文档,使得开发者可以使用C、C++、Python等语言编写程序,实现与FANUC数控系统的交互。这些API涵盖了从基本的NC程序读取、参数设置,到复杂的机床状态监控、实时数据采集等功能。例如,...

    嵌入式+Linux+C +…… .pdf

    - **C语言基础**:学习C语言的基本语法、数据类型、控制结构等内容,为后续的嵌入式编程打下坚实的基础。 - **嵌入式编程实践**:通过实际项目来加深对C语言的理解,例如编写简单的驱动程序、实现基本的输入输出操作...

    linux驱动开发的好书,老外写的

    - **I2C核心**:讨论Linux内核中支持I2C通信的核心组件。 - **总线事务**:解释如何通过I2C总线进行数据传输。 - **实例分析**:给出了EEPROM和实时时钟等设备的具体驱动实例。 - **硬件监控**:介绍如何使用LM-...

    Embedded-Linux-kernel-Programming

    嵌入式Linux内核编程是将Linux操作系统与硬件紧密结合的过程,用于开发运行在微控制器、嵌入式设备或专用系统上的高效、定制化的操作系统。在本文中,我们将深入探讨嵌入式Linux内核编程的关键概念、技术和实践。 ...

    嵌入式LINUX 系统开发概述

    嵌入式系统是指将计算机硬件和软件集成在一个或多个处理器上,形成一个专用的计算机系统,用于实现特定功能的产品或设备。这些系统通常具有高可靠性和实时性,广泛应用于消费电子、工业控制、汽车电子、航空航天等...

    Linux操作系统中通用双向循环链表的实现分析.pdf

    在Linux内核源代码中,双向循环链表是一种常用的数据结构,它广泛应用于各种场景,如进程就绪队列、专用内存缓冲管理队列、物理内存页面管理队列和定时器队列等等。这些队列中的元素尽管结点类型各异,但都可以看作...

    网络编程模板5

    在描述中提到的“线程专用数据TSD(Thread Specific Data)”是C语言中处理线程局部存储的一种方式,确保每个线程拥有自己的独立数据副本,不会互相干扰。TSD在多线程编程中非常关键,因为它允许数据安全地在各个...

    精通LINUX设备驱动程序开发

    目 录 第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

    How to install NiftyReg - Linux and MacOs

    NiftyReg 安装指南 - Linux 和 MacOs NiftyReg 是一个功能强大的图像注册工具,广泛应用于医疗图像处理领域。在本指南中,我们将详细介绍如何在 Linux 和 MacOs 系统上安装 NiftyReg。 安装前的准备 在安装 ...

    博创2410开发板—LINUX实验指导书

    根据提供的文件信息,我们可以将《博创2410开发板—LINUX实验指导书》中的主要内容归纳为以下几个重要的知识点: ### 1. 嵌入式Linux开发基础知识 #### 1.1 嵌入式Linux简介 - **定义**:嵌入式Linux是一种针对...

    S3C2440 + Linux2.6的几个驱动小例子(已在GEC2440上调试通过)

    标题中的"S3C2440 + Linux2.6的几个驱动小例子"是指基于S3C2440微处理器和Linux内核版本2.6的设备驱动程序示例。S3C2440是一款由Samsung制造的ARM9处理器,常用于嵌入式系统设计,如开发板和工业设备。Linux内核2.6...

    UP-Magic2410 linux 实验手册.pdf

    嵌入式Linux开发基础知识是学习嵌入式系统技术的重要组成部分,随着后PC时代的到来,嵌入式系统技术在信息家电、数据网络、工业控制、医疗卫生、航空航天等领域得到了广泛应用。本实验手册详细介绍了UP-Magic2410...

    clk-axi-clkgen.rar_AXI_linux axi

    因此,"clk-axi-clkgen.c"的实现需要遵循Linux驱动程序模型,确保与内核的兼容性和稳定性。 在设计AXI时钟发生器驱动时,开发人员需要考虑以下关键点: 1. **同步和异步时钟域**:AXI总线可能涉及多个时钟域,驱动...

Global site tag (gtag.js) - Google Analytics