如何为类成员变量定义threadprivate变量

时间:2013-06-18 21:33:02

标签: c++ openmp

我正在通过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 
}
}

提前致谢

1 个答案:

答案 0 :(得分:0)

  

OpenMP 3.0草案允许在静态类成员上使用threadprivate,但是    #pragma omp threadprivate必须存在于定义的内部   包含threadprivate静态类成员的类,并且必须   词汇在所有用途之前。 source

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