如何释放线程本地存储的堆内存
Posted
技术标签:
【中文标题】如何释放线程本地存储的堆内存【英文标题】:How to release heap memory of thread local storage 【发布时间】:2014-10-31 01:54:12 【问题描述】:我有一个用于线程本地存储的结构,如下所示:
namespace
typedef boost::unordered_map< std::string, std::vector<xxx> > YYY;
boost::thread_specific_ptr<YYY> cache;
void initCache()
//The first time called by the current thread.
if (!cache.get())
cache.reset(new YYY());
void clearCache()
if (cache.get())
cache.reset();
还有一个类,其对象可能由main thread
创建:
class A
public:
void f()
initCache();
//and for example:
insertIntoCache();
~A()
clearCache();// <-- Does/Can this do anything good ??
多个线程可以访问存储在例如全局容器中的A
的对象。这些线程中的每一个都需要不时调用A::f()
。因此,他们在 heap
上创建了自己的 cache
副本,并在完成所有工作后最终加入。
所以问题是:谁来清理线程的内存?如何? 谢谢
【问题讨论】:
【参考方案1】:没有理由打电话给clearCache()
。
一旦线程退出或thread_specific_ptr
超出范围,就会调用清理函数。如果你不将清理函数传递给thread_specific_ptr
的构造函数,它只会使用delete
。
【讨论】:
我明白了,请您提供参考以供更多阅读。谢谢 阅读thread_specific_ptr
boost.org/doc/libs/1_56_0/doc/html/thread/…的文档以上是关于如何释放线程本地存储的堆内存的主要内容,如果未能解决你的问题,请参考以下文章
[线程本地存储 · 语雀 (yuque.com)](https://www.yuque.com/haofeiyu/java/oz8uve) 线程本地存储提供了线程内存储变量的能力,这些变量是线程私有