这是一个简单的测试代码:
#include <stdlib.h>
__thread int a = 0;
int main() {
#pragma omp parallel default(none)
{
a = 1;
}
return 0;
}
gcc
编译这个没有任何问题,-fopenmp
但抱怨icc (ICC) 12.0.2 20110112
-openmp
test.c(7): error: "a" must be specified in a variable list at an enclosure OpenMP parallel pragma #pragma omp parallel default(none)
我不知道哪种范式(即shared
, private
)threadprivate
适用于这种类型的变量。哪一个是正确的使用?
调用访问该线程局部变量的函数时,我得到了预期的行为,但是我无法从显式并行部分中访问它。
编辑:
到目前为止,我最好的解决方案是通过函数返回指向变量的指针
static inline int * get_a() { return &a; }