如何在模板中声明线程本地静态

时间:2010-11-20 05:48:29

标签: c++ multithreading gcc

如何在模板类中定义一个也是线程局部的静态成员变量?我想我已经想出如何在GCC中做到这一点,但是想确认这在链接,初始化和解析方面都能正常工作。另外,转换到另一个编译器会很有帮助(比如MSVC)所以我可以得到一个很好的宏来做到这一点。

template<typename T>
class my_class
{
  struct some_type { };
  static __thread some_type * ptr;
};

template<typename T>
__thread typename my_class<T>::some_type * my_class<T>::ptr = 0;

实现相同功能的另一种方法也可以(即,每个模板实例使用一个不同的本地线程)。

1 个答案:

答案 0 :(得分:1)

我相信您的代码是正确的,并且可以通过__thread替换__declspec(thread)来转换为MSVC(请参阅MSDN上的Thread Local Storage):

template<typename T>
class my_class
{
  struct some_type { };
  static __declspec(thread) some_type * ptr;
};

template<typename T>
__declspec(thread) typename my_class<T>::some_type * my_class<T>::ptr = 0;