0
我已經使用線程本地存儲這樣的結構:如何釋放線程本地存儲的堆內存
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
副本,並在完成所有工作後加入。
所以問題是:誰來清理線程的內存?如何? 謝謝
我明白了,你能否給出一個更多閱讀的參考。謝謝 – rahman 2014-10-31 02:24:04
請閱讀http://www.obost.org/doc/libs/1_56_0/doc/html/thread/thread_local_storage.html#thread.thread_local_storage.thread_specific_ptr處的'thread_specific_ptr'文檔 – 2014-10-31 02:39:08