private:传入的参数创建形参并初始化为0,跟外面的没有产生关系,线程结束退出即销毁,不影响原值。
shared:不提了
firstprivate:传入的参数创建形参并初始化为原参的值。其他跟private一样。
#include<stdio.h>
#include <omp.h>
int main(){
int N=100;
#pragma omp parallel num_threads(10) firstprivate(N)
{
//N=omp_get_thread_num();
printf("thread%d : %d\n",omp_get_thread_num(),N);
N=omp_get_thread_num();
}
printf("%d\n",N);
}
# thread8 : 100
# .....
# thread0 : 100
# 100
lastprivate:最后那个循环最后的值覆盖掉原变量的值
#include<stdio.h>
#include <omp.h>
int main(){
int N=100;
#pragma omp parallel for lastprivate(N)
for(int i=0;i<40;i++){
printf("thread%d : %d\n",omp_get_thread_num(),N);
N=omp_get_thread_num();
}
printf("%d\n",N);
}
# thread1 : 1
# thread4 : 0
# 7
# 因为最多八个线程,所以for循环有40也只能跑到0->7
网友评论