0
나는이 같은 스레드 로컬 저장소에 사용되는 구조를 가지고 그 객체입니다 main thread
에 의해 생성 된 수스레드 로컬 저장소의 힙 메모리를 해제하는 방법
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();
}
}
}
그리고 클래스 :
class A {
public:
void f() {
initCache();
//and for example:
insertIntoCache();
}
~A(){
clearCache();// <-- Does/Can this do anything good ??
}
}
다중 스레드는 예를 들어 글로벌 컨테이너에 저장된 A
의 객체에 액세스 할 수 있습니다. 이 스레드는 각각 A::f()
을 호출해야합니다. 그래서 그들은 사본을 heap
에 한번 작성하고, 모든 작업을 마쳤을 때 마침내 참여합니다.
문제는 다음과 같습니다. 누가 스레드 메모리를 정리할 것입니까? 그리고 어떻게? 감사합니다.
더 많은 정보를 원하시면 참고 자료를 제공해주십시오. 덕분에 – rahman
http://www.boost.org/doc/libs/1_56_0/doc/html/thread/thread_local_storage.html#thread.thread_local_storage.thread_specific_ptr에서'thread_specific_ptr'에 대한 문서를 읽어보십시오. –