5

这个说法:

___thread A a;

生成此错误:

不能是线程本地的,因为它具有非 POD 类型

其中 A 是

class A{
       public:
               // function declaration
       private:
               // data members
};

我正在尝试在 Linux 上进行编译,使用命令 ogs includes & ogs mk。我们有静态线程,即在我们的应用程序进入之前,我们知道线程的数量,因此目前的工作是通过声明 A 的数组来完成,即

A a[Number of threads].

我怎样才能解决这个问题?

4

2 回答 2

2

假设您使用gcc,仅支持POD类型的线程本地存储,即仅数据结构。您可以尝试将数据提取到一个单独的文件中struct并使其成为线程本地的(实际上,这在任何情况下都可能是一个好主意,因为将方法设为线程本地没有多大意义)。

于 2012-11-29T18:12:30.143 回答
1

不幸的是,在 C++03 中没有线程本地资源的动态初始化(和销毁)(无论如何,它对线程一无所知)。

在 C++11 中,thread_localstorage 关键字允许以运行时开销为代价进行动态初始化(基本上,相当于拥有一个线程局部静态变量),因此可以在没有构造函数的类型的情况下使用。

同样,在 C++11 中,constexpr可能会调用构造函数来进行静态初始化,因此应该与说明__thread符兼容,前提是您的编译器实现了它。

于 2012-11-29T18:37:37.667 回答