// threadprivate编译指导语句使一个全局文件作用域的变量在并行域内变成
// 每个线程私有,每个线程对该变量复制一份私有拷贝
int alpha[10], beta[10], i;
#pragma omp threadprivate(alpha)
int main ()
{
// 第一个并行区域
#pragma omp parallel private(i,beta)
for (i=0; i < 10; i++)
alpha[i] = beta[i] = i;
// 第二个并行区域
#pragma omp parallel
printf("alpha[3]= %d and beta[3]=%d\n", alpha[3], beta[3]);
}
// 线程私有数据——线程私有数据与threadprivate和copyin子句:使用threadprivate子句用来标明
// 某一个变量是线程私有数据,在程序运行的过程中,不能够被其他线程访问到。使用copyin子句对线程私有的全局变量进行初始化
int counter = 0;
// 使用threadprivate
#pragma omp threadprivate (counter)
void inc_counter() { counter++; }
int _tmain(int argc, TCHAR *argv[])
{
#pragma omp parallel
for(int i = 0; i < 10000; i++)
inc_counter();
printf("counter=%d\n", counter);
}
及
int global = 0;
#pragma omp threadprivate(global)
int _tmain(int argc, TCHAR * argv[])
{
global = 1000;
#pragma omp parallel copyin(global)
{
printf("global=%d\n", global);
global = omp_get_thread_num();
}
printf("global=%d\n", global);
printf("parallel again\n");
#pragma omp parallel
printf("global=%d\n", global);
}
OpenMP threadprivate
最新推荐文章于 2024-04-21 20:08:27 发布