【发布时间】:2020-08-29 01:24:23
【问题描述】:
thread_local 数据是 C++ 运行时使用来自.tdata/.tbss 部分的数据初始化的值(假设 ELF abi)。因此,添加另一对称为.tinit/.tfini 的部分似乎是可行的。这些部分可能包含在从属线程启动和终止以及线程本地内存建立后始终运行的代码(类似于在主线程开始/结束时执行的.init/.fini 部分)。非平凡线程本地对象的构造函数和析构函数然后可以被链接器集中到这些对象中。
假定的.tfini 部分的功能目前由__cxa_thread_atexit 和朋友的动态机制处理(开销很大)。但是,运行时没有为“自动”线程初始化代码提供专门的工具:对于所有非平凡的线程本地对象,编译器必须发出在每次访问时都会检查的保护变量。
所以问题是:线程本地数据功能架构师是否评估了上述方法?发现了哪些缺点(除了显然不是一成不变的线程执行语义的更改)?
【问题讨论】:
-
只是好奇,这个答案有用吗?
-
不,不是。
-
我建议你问清楚问题。
标签: c++11 elf thread-local-storage