看下面这段代码:
#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,则在子函数调用时子函数内的全局变量传递不到子函数外面。
比如下面程序:
最新评论
5 周 7 小时 前
5 周 1 天 前
9 周 2 天 前
14 周 2 天 前
24 周 3 天 前
43 周 5 天 前
1 年 4 周 前
1 年 4 周 前
1 年 12 周 前
1 年 12 周 前