本声明:
___thread A a;
生成此错误:
不能是线程本地的,因为它具有非POD类型
其中A是
class A{
public:
// function declaration
private:
// data members
};
我正在尝试在Linux上编译,使用命令ogs includes& ogs mk。 我们有静态线程,即在我们的应用程序进入之前我们知道线程的数量,因此当前解决了A数组的工作。
A a[Number of threads].
我该如何解决这个问题?
答案 0 :(得分:2)
假设您使用gcc
,线程本地存储仅支持POD
类型,即仅数据结构。
您可以尝试将数据提取到单独的struct
中并使其成为本地线程(实际上,这在任何情况下都可能是一个好主意,因为在使方法线程本地时没有多大意义)。
答案 1 :(得分:1)
不幸的是,在C ++ 03中没有线程本地资源的动态初始化(和销毁)这一点(无论如何都对线程一无所知)。
在C ++ 11中,thread_local
storage关键字允许以运行时开销为代价进行动态初始化(基本上,相当于具有线程本地静态变量),因此可以在没有构造函数的类型的情况下使用。 / p>
在C ++ 11中,同样,constexpr
构造函数可能会调用静态初始化,因此应该与__thread
说明符兼容,前提是编译器实现它。