看下面这段代码:
#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 周 1 天 前
16 周 3 天 前
16 周 3 天 前
16 周 3 天 前
19 周 4 天 前
21 周 1 天 前
35 周 2 天 前
1 年 11 周 前
1 年 11 周 前
1 年 13 周 前