2

我正在通过 OpenMP 编写一个多线程的面向对象的 c++ 代码。为了简单和通用,我不得不在模板类中定义我的一些变量和函数。我想让它们threadprivate利用线程私有变量的持久性特性,并能够在嵌入或调用模板类的其他函数或源文件中使用它们。但我收到以下错误:“ ...不是文件、命名空间或块范围变量”我知道我只能threadprivate对文件、命名空间或块范围变量使用指令,但我想知道是否有任何替代应用threadprivate指令也适用于班级成员。我的总代码布局如下:

template<typename T> class EntContainer
{
private:
T** empties;
e_NumPointers;
e_nLists;
.
.
.
public:
#pragma omp threadprivate(empties, e_NumPointers, e_nLists)
void function
{
// do some paralle stuff using #pragma omp parallel 
}
}

提前致谢

4

1 回答 1

0

OpenMP 3.0 草案允许在静态类成员上使用 threadprivate,但 #pragma omp threadprivate 必须存在于包含 threadprivate 静态类成员的类的定义中,并且必须在所有使用之前在词法上。资源

使成员静态并在其声明下方移动#pragma omp threadprivate 指令应该可以修复错误。

于 2017-03-23T12:49:15.207 回答