在boost :: thread_specific_ptr中是否存在使用STL容器(向量等)的约束

时间:2017-06-09 22:29:32

标签: c++ multithreading boost stl

我目前正在开发一个项目,需要每个线程存储来缓存提取的数据。我正在研究boost :: thread_specific_ptr的解决方案,但我仍然不太清楚以下几个方面:

对象thread_specific_ptr指向实际在进程地址空间中分配的对象在哪里?是那些特殊细分市场,如bss,数据或其他?是否会受到保护,以便同一进程中的任何其他线程无法检查对象所在的地址?如果它是一个特殊的内存部分,在boost :: thread_specific_ptr中使用STL容器是危险的,因为它可以在添加更多数据时自动调整大小直到跨越截面边界吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

线程局部指针是依赖于平台的,但是您通过存储的对象就在堆上。

唯一真正的本地线程是指向它的指针,操作系统/运行时库将有一些与线程相关的存储来保存它们。这是一个实现细节,你不需要不用担心。

如果您计划存储大量容器,请考虑存储一个包含(指向)所有容器的结构。

此外,谨慎使用线程本地存储。根据它们,我的书中有一种设计气味。您可能只需要进程隔离,而不是线程。