Oracle® Solaris 11.2 链接程序和库指南

退出打印视图

更新时间: 2014 年 7 月
 
 

创建线程

对于初始线程和所创建的每个新线程,线程库将为每个已装入的动态目标文件分配一个新的 TLS 块。各个块可以单独进行分配,也可以作为一个连续块进行分配。

每个线程 t 都有一个关联的线程指针 tpt,该指针指向线程控制块 TCB。线程指针 tp 始终包含当前正在运行的线程的 tpt 值。

然后,线程库为当前线程 t 创建一个指针向量 dtvt。每个向量的第一个元素都包含一个生成号 gent,该生成编号用于确定需要扩展向量的时间。请参见延迟分配线程局部存储块

dtvt,m 向量中剩余的每个元素都是一个指针,指向为属于动态目标文件 m 的 TLS 保留的块。

对于启动后动态装入的目标文件,线程库将延迟分配 TLS 块。分配将在第一次引用已装入的目标文件中的 TLS 变量时进行。对于延迟分配的块,指针 dtvt,m 设置为实现定义的特殊值。


注 - 运行时链接程序可以将所有启动目标文件的 TLS 模板进行分组,以便在向量 dtv t,1 中共享单个元素。这种分组不会影响前面介绍的偏移计算,也不会影响初始化记录列表的创建。但是,对于以下各节,总目标文件数 M 的值从 1 开始。

然后,线程库将初始化映像复制到新存储块中的对应位置。