【问题标题】:Is there any constrain for using STL containers (vector, etc) in boost::thread_specific_ptr在 boost::thread_specific_ptr 中使用 STL 容器(向量等)是否有任何限制
【发布时间】:2017-11-12 01:03:57
【问题描述】:

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

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

提前致谢!

【问题讨论】:

    标签: c++ multithreading boost stl


    【解决方案1】:

    线程本地指针是平台相关的,但您存储的对象通过它只是在堆上。

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

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

    另外,请谨慎使用线程本地存储。在我的书中,取决于它们是一种设计气味。您可能只需要进程隔离,而不是线程。

    【讨论】:

    • 感谢您的回复!所以说“你通过它存储的对象只是在堆上”,你的意思是如果我使用 boost::thread_specific_ptr(std::vector) 之类的东西,向量本身及其内容都将在堆中,对吗?
    • 是的。 (还有什么)。因为这个原因,它实际上被称为thread_specific_ptr
    猜你喜欢
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    • 2013-08-12
    • 1970-01-01
    相关资源
    最近更新 更多