概述
TSL(Thread Local Storage)全称为线程本地存储变量,指每个线程有独立的存储,进程内不共享。对于TLS变量来说,不同的线程指向不同的存储空间。它的实现涉及高级编程语言、编译器和链接器的支持。
TLS变量的申请
在高级编程语言中,在多线程环境下定义申请TLS变量,线程间对TLS变量的修改互不影响,像普通变量一样可以在赋值语句中读写访问。
线程的动态管理
除了主线程外,其它线程都在程序运行时创建和销毁,在加载共享对象文件时,无法确认何时创建线程,创建多少线程等信息。因此对TLS变量libc需要进行动态管理。由于不同线程访问TLS变量的地址空间不一样,libc需要管理TLS变量的地址空间,需要动态获取TLS变量地址。
编译器和链接器将动态库中所有的TLS变量放在同一个TLS程序段中,TLS变量相对于TLS程序段的偏移是固定的。
添加评论