gpt4 book ai didi

c++ - 变量中的不同值

转载 作者:太空宇宙 更新时间:2023-11-04 14:17:53 24 4
gpt4 key购买 nike

为什么我在 mainfoo 中有不同的 i 值?

这是我的示例代码:

#include<stdio.h>
#include<omp.h>

double a;
int i;
int j;
int nr_threads;

void foo()
{
printf("foo::i: \t%d\n", i);
}


int main()
{
puts("hejka");
a = 0;

nr_threads = omp_get_num_threads();
printf("Threads: %d\n", nr_threads);

omp_set_num_threads(7);

#pragma omp parallel private(i,j) shared(a)
{
#pragma omp single
{
nr_threads = omp_get_num_threads();
printf("Threads: %d\n", nr_threads);
}

#pragma omp for reduction(+:a)
for(i=0;i<10;i++)
{
printf("main::i:\t%d\n", i);
foo();
}
}

printf("a: %lf\n",a);
printf("i: %d\n",i);
printf("j: %d\n",j);
return 0;
}

最佳答案

问题是 parallel for 的循环变量隐式地为每个工作线程设置为私有(private)的,因此每个线程都将获得一个私有(private)变量 i。工作线程看到的i和主线程看到的i之间没有任何联系,除了名字。

关于c++ - 变量中的不同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9795151/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com