Search code examples
c++linuxmultithreadingnew-operatorthread-local-storage

How to allocate thread local storage?


I have a variable in my function that is static, but I would like it to be static on a per thread basis.

How can I allocate the memory for my C++ class such that each thread has its own copy of the class instance?

AnotherClass::threadSpecificAction()
{
  // How to allocate this with thread local storage?
  static MyClass *instance = new MyClass();

  instance->doSomething();
}

This is on Linux. I'm not using C++0x and this is gcc v3.4.6.


Solution

  • #include <boost/thread/tss.hpp>
    static boost::thread_specific_ptr< MyClass> instance;
    if( ! instance.get() ) {
        // first time called by this thread
        // construct test element to be used in all subsequent calls from this thread
        instance.reset( new MyClass);
    }
        instance->doSomething();