如何释放线程本地存储的堆内存

时间:2014-10-31 01:54:13

标签: c++ multithreading boost-thread thread-local thread-local-storage

我有一个用于线程本地存储的结构,如下所示:

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()。因此,他们在cache上创建了自己的heap副本,并在完成所有工作后最终加入。

所以问题是:谁将要清理线程的内存?如何? 谢谢

1 个答案:

答案 0 :(得分:1)

没有理由拨打clearCache()

一旦线程退出或thread_specific_ptr超出范围,将调用清理函数。如果您没有将清理功能传递给thread_specific_ptr的构造函数,则只会使用delete