Thread-specific data(TSD)线程私有数据】的更多相关文章

Thread-specific data(TSD)线程私有数据 http://blog.chinaunix.net/uid-26885237-id-3209913.html linux多线程编程中引入了Thread-Specific Data(线程相关的数据)的概念 为什么需要"线程相关的数据"呢?怎样使用"线程相关的数据"呢? 1. 为什么需要Thread-Specific Data "线程相关的数据" 这里只介绍我个人认为的一个原因, 当然它…
线程中特有的线程存储, Thread Specific Data .线程存储有什么用了?他是什么意思了? 大家都知道,在多线程程序中,所有线程共享程序中的变量.现在有一全局变量,所有线程都可以使用它,改变它的值.而如果每个线程希望能单独拥有它,那么就需要使用线程存储了.表面上看起来这是一个全局变量,所有线程都可以使用它,而它的值在每一个线程中又是单独存储的.这就是线程存储的意义. 函数原型: int pthread_key_create(pthread_key_t *key, void (*de…
进程内的所有线程共享进程的数据空间,所以全局变量为所有线程共有.在某些场景下,线程需要保存自己的私有数据,这时可以创建线程私有数据(Thread-specific Data)TSD来解决.在线程内部,私有数据可以被线程的各个接口访问,但对其他线程屏蔽. 线程私有数据采用了一键多值技术,及一个key对应多个值.访问数据都是通过键值来访问的. 使用线程私有数据时,需要对每个线程创建一个关联 的key,linux中主要有四个接口来实现: 1.pthread_key_create:创建一个键 int p…
一:线程私有数据: 线程是轻量级进程,进程在fork()之后,子进程不继承父进程的锁和警告,别的基本上都会继承,而vfork()与fork()不同的地方在于vfork()之后的进程会共享父进程的地址空间,但是有了写实复制(fork()之后的子进程也不会直接复制父进程的地址空间在另一块内存,除非子进程修改了某种信息,才会在内存中为它重新复制一块区域)的出现之后,vfork()基本上就没什么作用了.但是线程与进程相比,还是有许多优点,比如节约资源,它复制的东西比vfork()之后的进程复制的东西还要…
概念及作用 在单线程程序中,我们经常要用到"全局变量"以实现多个函数间共享数据.在多线程环境下,由于数据空间是共享的,因此全局变量也为所有线程所共有.但有时应用程序设计中有必要提供线程私有的全局变量,仅在某个线程中有效,但却可以跨多个函数访问,比如程序可能需要每个线程维护一个链表,而使用相同的函数操作,最简单的办法就是使用同名而不同变量地址的线程相关数据结构.这样的数据结构可以由Posix线程库维护,称为线程私有数据(Thread-specific Data,或TSD).   回页首…
线程私有数据(Thread-specific data,TSD):存储和查询与某个线程相关数据的一种机制. 在进程内的所有线程都共享相同的地址空间,即意味着任何声明为静态或外部变量,或在进程堆声明的变量,都可以被进程内所有的线程读写. 一个线程真正拥有的唯一私有存储是处理器寄存器,栈在"主人"故意暴露给其他线程时也是共享的. 有时需要提供线程私有数据:可以跨多个函数访问(全局):仅在某个线程有效(私有)(即在线程里面是全局).例如:errno. 进程中的所有线程都可以访问进程的整个地址…
原型: #include <pthread.h> void *pthread_getspecific(pthread_key_t key); int pthread_setspecific(pthread_key_t key, const void *value); 说明: TSD 的读写都通过上面两个专门的 Posix Thread 函数进行. 函数 pthread_setspecific() 将 pointer 的值 (不是锁指的内容) 与key 相关联. 函数 pthread_getsp…
转自:http://blog.csdn.net/kkxgx/article/details/7513278 版权声明:本文为博主原创文章,未经博主允许不得转载. 一,一次性初始化 以保证线程在调用资源时,确保资源已经被初始化,并且只初始化一次. 在传统的顺序编程中,一次性初始化经常通过使用布尔变量来管理.控制变量被静态初始化为0,而任何依赖于初始化的代码都能测试该变量.如果变量值仍然为0,则它能实行初始化,然后将变量置为1.以后检查的代码将跳过初始化. 但是在多线程程序设计中,事情就变的复杂的多…
在多线程程序中.常常要用全局变量来实现多个函数间的数据共享.因为数据空间是共享的,因此全局变量也为全部线程共同拥有. 測试代码例如以下: #include <stdio.h> #include <pthread.h> #include <unistd.h> #include <stdlib.h> int key = 100; //全局变量 void *helloworld_one(void *arg) { printf("the message i…
这个原作者的这个地方写错了 且他举的例子非常不好.最后有我的修正版本 pthread_setspecific(key, (void *)&my_errno); linux 线程私有数据之一键多值技术TSD池 2012-09-15 16:22:08 分类: LINUX                linux 线程私有数据之 一键多值技术 进程内的所有线程共享进程的数据空间,因此全局变量为所有线程所共有.但有时线程也需要保存自己的私有数据,这时可以创建线程私有数据(Thread- specific…