美文网首页
阅读记录——线程局部存储

阅读记录——线程局部存储

作者: eesly_yuan | 来源:发表于2016-07-31 20:19 被阅读245次
what?

TLS
thread local storage

TSD
thread special data

TLS/TSD算是从一个新的作用域定义一种变量存储类型,即该变量在线程的作用域上进行隔离,不同的线程的该类型变量相互隔离\独立。

why?

多线程下线程安全通常采用以下两种方式
1、如果多线程间有数据同步需求,通常采用全局变量+锁机制
2、如果线程间处理数据相互独立,线程内数据处理通常采用局部变量,或者通过传参的方式(实际也是局部变量)。

针对第2种情况,有时候线程处理数据增加时,通常需要改接口,添加参数(或者是接口设计不好),采用TLS/TSD可以避免这种问题,线程处理函数内部是数据可以通过TLS/TSD进行传递,避免修改接口通过传参数,同时又可以实现各个线程间数据隔离。

how?

/*不论哪个线程调用pthread_key_create(),所创建的key都是所有线程可访问的,
但各个线程可根据自己的需要往key中填入不同的值,这就相当于提供了一个同名
而不同值的全局变量*/
int pthread_key_create(pthread_key_t *key, void (*destructor)(void*));

/*pthread_key_delete并不检查当前是否有线程正使用该key,也不会调用清理函
数(destr_function),而只是将该key释放以供下一次调用pthread_key_create()
使用*/
int pthread_key_delete(pthread_key_t key);

void *pthread_getspecific(pthread_key_t key);
int pthread_setspecific(pthread_key_t key, const void *value);

example demo for tls

more

TLS/TSD实现机制,转自http://blog.csdn.net/cywosp/article/details/26469435

  • 进程级别的全局数组,用于存放线程局部存储的键值信息
    pthread_key_create()返回的pthread_key_t类型值只是对全局数组的索引,该全局数组标记为pthread_keys,其格式大概如下,(数组的每个元素都是一个包含两个字段的结构,第一个字段标记该数组元素是否在用,第二个字段用于存放针对此键、线程局部存储变的解构函数的一个副本,即destructor函数。)


  • 每个线程设置一个数组,存储每个线程的特有数据块的指针(通过调用pthread_setspecific()函数来存储的指针,即参数中的value)大多数都类似于下图的实现。


reference

相关文章

  • 阅读记录——线程局部存储

    what? TLSthread local storage TSDthread special data TLS/...

  • 线程局部存储

    线程局部存储 线程局部存储(TLS,thread local storage) 就是拥有线程生命周期及线程可见性的...

  • 深入多线程4

    线程局部变量线程局部变量也叫线程局部存储,ThreadLocal类给每个线程都添加了一个变量,专门来存储每一个线程...

  • Java ThreadLocal 的用法

    前言 ThreadLocal提供了线程局部变量,当前线程全局共享,线程隔离。 源码实现 线程局部变量是存储在Thr...

  • 一文详解Java中的ThreadLocal

    ThreadLocal用于多线程环境下每个线程存储和获取线程的局部变量,这些局部变量与线程绑定,线程之间互不影响。...

  • 线程局部存储tls的使用

    线程局部存储(Thread Local Storage,TLS)主要用于在多线程中,存储和维护一些线程相关的数据,...

  • Linux 中的线程局部存储(2)

    《Linux 中的线程局部存储(1)》提到了一种,其实在Linux中还有一种更为高效的线程局部存储方法,就是使用关...

  • JVM篇

    一、java内存区域的组成 程序计数器,线程私有,用来存储线程执行到哪条字节码指令; 栈,线程私有,存储局部变量,...

  • AutoreleasePool解析

    关键点 双向链表 AutoreleasePoolPageData TLS 线程局部存储? HotPage和Cold...

  • 线程局部存储空间 pthread_key_t、__thread

    线程局部存储空间 pthread_key_t、__thread 即 ThreadLocal__threadpthr...

网友评论

      本文标题:阅读记录——线程局部存储

      本文链接:https://www.haomeiwen.com/subject/zgotsttx.html