线程局部存储(Thread Local Storage,TLS)

原创 2012年03月29日 11:32:34

线程局部存储(Thread Local Storage,TLS)用来将数据与一个正在执行的指定线程关联起来。

进程中的全局变量与函数内定义的静态(static)变量,是各个线程都可以访问的共享变量。在一个线程修改的内存内容,对所有线程都生效。这是一个优点也是一个缺点。说它是优点,线程的数据交换变得非常快捷。说它是缺点,一个线程死掉了,其它线程也性命不保; 多个线程访问共享数据,需要昂贵的同步开销,也容易造成同步相关的BUG。

如果需要在一个线程内部的各个函数调用都能访问、但其它线程不能访问的变量(被称为static memory local to a thread 线程局部静态变量),就需要新的机制来实现。这就是TLS。

功能:它主要是为了避免多个线程同时访存同一全局变量或者静态变量时所导致的冲突,尤其是多个线程同时需要修改这一变量时。为了解决这个问题,我们可以通过TLS机制,为每一个使用该全局变量的线程都提供一个变量值的副本,每一个线程均可以独立地改变自己的副本,而不会和其它线程的副本冲突。从线程的角度看,就好像每一个线程都完全拥有该变量。而从全局变量的角度上来看,就好像一个全局变量被克隆成了多份副本,而每一份副本都可以被一个线程独立地改变。

相关文章推荐

TLS(thread - local storage)线程局部存储

线程局部存储是一个使用很方便的存储线程局部数据的系统。利用TLS机制可以为进程中所有的线程关联若干数据,各个线程通过由TLS分配的全部索引来访问与自己关联的数据。这样,每个线程都可以有线程局部的静态存...

线程局部存储 Thread Local Storage

1 由于多个线程使用同一个变量,各个线程     都对变量进行操作,那么变量的值会被不同     线程操作覆盖。                 通常   变量A                  ...
  • rankun1
  • rankun1
  • 2016年02月16日 20:29
  • 174

线程的局部存储tls (thread local storage)

线程局部存储tls(thread local storage) 线程的局部存储就是让一个全局的变量或者静态变量在每一个线程都有自己的立足之地. 动态TLS 首先调用API函数,获取当前进程可用的TLS...

[并发并行]_[C/C++]_[使用线程本地存储Thread Local Storage(TLS)调用复制文件接口的案例]

使用场景: 1. 在复制文件时,一般都是一个线程调用一个接口复制文件,这时候需要缓存数据,如果每个文件都需要创建独立的缓存,那么内存碎片是很大的. 如果创建一个static的内存区,当多线程调用同一个...

[并发并行]_[C/C++]_[使用线程本地存储Thread Local Storage(TLS)-win32线程和pthread线程比较]

场景: 1. 需要统计某个线程的对象上创建的个数. 2. 当创建的堆空间需要根据线程需要创建和结束时销毁时. 3. 因为范围是线程只能看到自己的存储数据,所以不需要临界区或互斥量来维护自己的堆内存....

线程局部存储TLS

  • 2015年07月06日 09:17
  • 511KB
  • 下载

线程局部存储TLS

进程和线程实现并发,它们各自都有优缺点。进程是因为具有独立的进程地址空间,所以在创建进程和销毁进程时需要额外的开销,但是由于进程间的数据是独立的,因此一般情况下当一个进程出现意外死去的时候,是不会影响...

线程局部存储tls的使用

线程局部存储(Thread Local Storage,TLS)主要用于在多线程中,存储和维护一些线程相关的数据,存储的数据会被关联到当前线程中去,并不需要锁来维护。。因此也没有多线程间资源竞争问题,...
  • waruqi
  • waruqi
  • 2016年11月17日 16:04
  • 334

浅析Windows操作系统中的线程局部存储(TLS)机制

多线程是编程中比较容易出问题的一块儿,究其原因,是因为多线程程序往往违背了高级语言屏蔽系统底层细节的设想,而需要程序员对于操作系统的调用机制有深入了解。会用高级语言写算法程序->编写多线程程序可能是一...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:线程局部存储(Thread Local Storage,TLS)
举报原因:
原因补充:

(最多只允许输入30个字)