看下面这段代码:
#include <stdio.h> #include <stdlib.h> #include <omp.h> void para_print() { //automatic vars in a routine called within an omp region is private implicitly int i,tid; /*if you need shared vars inside omp function call, use static vars; * the side effect is static vars keeps its previous value * if not reset a initial value during each call*/ static int j; #pragma omp single { printf(“tid: i,j\n”); j=10; } #pragma omp for for(i=0;i<5;i++) { tid=omp_get_thread_num(); #pragma omp critical { j++;
多个并行域之间,或者并行域内部的函数调用之间如果需要在线程内部共享全局变量,必须用threadprivate。如果不将全局变量声明为threadprivate而是声明为private,则在子函数调用时子函数内的全局变量传递不到子函数外面。
比如下面程序:
最新评论
4 周 5 天 前
4 周 6 天 前
9 周 17 小时 前
14 周 8 小时 前
24 周 1 天 前
43 周 3 天 前
1 年 3 周 前
1 年 3 周 前
1 年 12 周 前
1 年 12 周 前