我不知道如何使一个结构或对象为THREADPRIVATE,我在做什么产生一个错误:如何在OpenMP中将对象或结构定义为threadprivate?
struct point2d{
int x;
int y;
point2d(){
x = 0;
y = 0;
}
//copy constructor
point2d(point2d& p){
x = p.x;
y = p.y;
}
};
我宣布一个静态结构,努力使他们线程专用
static point2d myPoint;
#pragma omp threadprivate(myPoint)
它产生一个错误:
error C3057: 'myPoint' : dynamic initialization of 'threadprivate' symbols is not currently supported
它意味着,当前的OpenMP编译器不支持此作一个结构THREADPRIVATE?或者我所做的是错误的。 有没有其他的方法来传递一个结构或对象?
这里是我的代码剩余部分:
void myfunc(){
printf("myPoint at %p\n",&myPoint);
}
void main(){
#pragma omp parallel
{
printf("myPoint at %p\n",&myPoint);
myfunc();
}
}
你是用C编译器还是C++编译的?我看到你将它标记为两者。它看起来可能不喜欢构造函数。详细说来,它看起来可能不会像调用构造函数来初始化数据,而不是来自'.text'的静态副本。 – rjp
我正在使用vC++,你的意思是手动传递它更好吗? –
在我看来'threadprivate'变量需要静态初始化。我不知道如何去做,而不是抛开构造函数,只写一个函数'initPoint2d(point2d&p,int inX,int inY)'。这违反了面向对象的“规则”,但我相信。我是一个C人。 – rjp