• 举个栗子

    •  #include <stdio.h>
      #include <stdlib.h>
      #include <unistd.h>
      #include <sys/types.h>
      #include <pthread.h>
      #include <errno.h>
      #include <string.h> #define ERR_EXIT(m)\
      do\
      {\
      perror(m);\
      exit(EXIT_FAILURE);\
      }while()\ typedef struct tsd
      {
      pthread_t tid;
      char* str;
      }tsd_t; pthread_key_t key_tsd; void destroy_routine(void* value)
      {
      free(value);
      printf("destroy...\n");
      } void* thread_routinne(void* arg)
      {
      tsd_t* value = (tsd_t*)malloc(sizeof(tsd_t));
      value->tid = pthread_self();
      value->str = (char*)arg; pthread_setspecific(key_tsd,value); printf("%s setspecific %p\n",(char*)arg,value); value = pthread_getspecific(key_tsd);
      printf("tid=0x%x str=%s\n",value->tid,value->str);
      sleep(); value = pthread_getspecific(key_tsd);
      printf("tid=0x%x str=%s\n",value->tid,value->str);
      return NULL;
      } int main(void)
      {
      pthread_key_create(&key_tsd,destroy_routine); pthread_t tid1;
      pthread_t tid2;
      pthread_create(&tid1, NULL, thread_routinne, "thread1");
      pthread_create(&tid2, NULL, thread_routinne, "thread1"); pthread_join(tid1,NULL);
      pthread_join(tid2,NULL); pthread_key_delete(key_tsd); return ;
      }
    • 分析

      • 线程特定数据对每个线程都有一个独立的数据

pthread线程特定数据的更多相关文章

  1. Linux多线程实践(4) --线程特定数据

    线程特定数据 int pthread_key_create(pthread_key_t *key, void (*destr_function) (void *)); int pthread_key_ ...

  2. 线程的属性和 线程特定数据 Thread-specific Data

    一.posix 线程属性 POSIX 线程库定义了线程属性对象 pthread_attr_t ,它封装了线程的创建者可以访问和修改的线程属性.主要包括如下属性: 1. 作用域(scope) 2. 栈尺 ...

  3. pthread线程私有数据

    进程内所有的线程共享地址空间,任何声明为静态或外部的变量,或在进程堆声明的变量都可以被进程内的所有线程读写. static,extern,或堆变量的值是上次线程改写的值 一个线程真正拥有的唯一私有存储 ...

  4. 线程特定数据TSD总结

    一线程的本质 二线程模型的引入 三线程特定数据 四关键函数说明 五刨根问底啥原理 六私有数据使用演示样例 七參考文档 一.线程的本质 Linux线程又称轻量进程(LWP),也就说线程本质是用进程之间共 ...

  5. muduo网络库源码学习————线程特定数据

    muduo库线程特定数据源码文件为ThreadLocal.h //线程本地存储 // Use of this source code is governed by a BSD-style licens ...

  6. 【C/C++多线程编程之十】pthread线程私有数据

    多线程编程之线程私有数据      Pthread是 POSIX threads 的简称.是POSIX的线程标准.         线程同步从相互排斥量[C/C++多线程编程之六]pthread相互排 ...

  7. LInux多线程编程----线程特定数据的处理函数

    1.pthread_key_t和pthread_key_create() 线程中特有的线程存储, Thread Specific Data .线程存储有什么用了?他是什么意思了?大家都知道,在多线程程 ...

  8. Linux多线程实践(四 )线程的特定数据

    在单线程程序中.我们常常要用到"全局变量"以实现多个函数间共享数据, 然而在多线程环境下.因为数据空间是共享的.因此全局变量也为全部线程所共同拥有.但有时应用程序设计中有必要提供线 ...

  9. [转] unix/linux下线程私有数据实现原理及使用方法

     在维护每个线程的私有数据的时候,我们可能会想到分配一个保存线程数据的数组,用线程的ID作为数组的索引来实现访问,但是有一个问题是系统生成的线程 ID不能保证是一个小而连续的整数,并且用数组实现的时候 ...

随机推荐

  1. 让使用SQLite的.NET应用自适应32位/64位系统

    如果一个.NET应用要自适应32位/64位系统,只需要在项目的“目标平台”设置为“Any CPU”.但是如果应用中使用了SQLite,情况就不同了. SQLite的.NET开发包来自是System.D ...

  2. Zabbix-2.4-安装-2

    zabbix自定义报警-动作   打开资产自动接收   这里看到主机资产有数据了,这里的数据,就是来自下面的关联 上面的数据就是设置login-user时候设置的关联    有些关联显示的慢,比如下面 ...

  3. Linux下nohup日志输出过大问题解决方案

    转载自:http://blog.csdn.net/shawnhu007/article/details/50971084 最近在一hadoop测试集群运行一个spark streaming程序,然后使 ...

  4. JDK1.8中如何用ScriptEngine动态执行JS

    JDK1.8中如何用ScriptEngine动态执行JS jdk1.6开始就提供了动态脚本语言诸如JavaScript动态的支持.这无疑是一个很好的功能,毕竟Java的语法不是适合成为动态语言.而JD ...

  5. go bytes缓冲区使用介绍 -转自https://www.cnblogs.com/--xiaoyao--/p/5122138.html

    缓冲区原理简介: go字节缓冲区底层以字节切片做存储,切片存在长度len与容量cap, 缓冲区写从长度len的位置开始写,当len>cap时,会自动扩容.缓冲区读会从内置标记off位置开始读(o ...

  6. MySQL行级锁测试

    http://blog.csdn.net/bigtree_3721/article/details/77417518 http://blog.csdn.net/zengxuewen2045/artic ...

  7. 第一个NDK工具:AddInputsSol

    工具名称:AddInputsSol 系统平台:Windows 7x64 软件平台:Nuke8.0v5x64 基本功能:分别获取AddInputsSol节点上游的framerange信息,点击Rende ...

  8. 黄聪:C#“多线程线程间操作无效: 从不是创建控件的线程访问它。”,跨线程修改控件属性解决方案

    解决方案就是使用代理,在代理中调用主线程的方法来控制控件 /// <summary> /// 声明代理 /// </summary> delegate void SetText ...

  9. 两种方式:mysql查看正在执行的sql语句

    mysql查看正在执行的sql语句 2015年08月21日 17:32:59 阅读数:15398   有2个方法: 1.使用processlist,但是有个弊端,就是只能查看正在执行的sql语句,对应 ...

  10. yarn和npm命令对比