如果要从并行作用域之外访问私有化变量的线程局部值,则可以将它们写回到全局声明的辅助数组中。这就是在OpenMP书中描述的方式
((2017-Bertil Schmidt,Jorge Gonzalez-Dominguez,Christian Hundt,Moritz Schlarb-并行编程_概念与实践-摩根考夫曼)
作者提出了该程序-
int main () {
// maximum number of threads and auxiliary memory
int num = omp_get_max_threads();
int * aux = new int[num];
int i = 1; // we pass this via copy by value
#pragma omp parallel firstprivate(i) num_threads(num) {
// get the thread identifier j
int j = omp_get_thread_num();
i += j;
aux[j] = i;
}
for(k=0; k<num; k++)
printf("%d \n", aux[k]);
}
在Mac中尝试过此->
这里是什么问题?
new
不是C
的运算符。 new
用于C++
,在C
中,您可以使用malloc
等其他功能分配内存。
正如您在错误中看到的,它显示为new undeclared
,因为未在C
中定义此运算符。(就像使用未知名称一样)
所以它希望您在这里new int[num];
添加一些东西,因为它是这样的>>
unknown_name/*add something like ;*/ int[num];