Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在OpenMp中管理共享变量_C++_C_Multithreading_Openmp - Fatal编程技术网

C++ 如何在OpenMp中管理共享变量

C++ 如何在OpenMp中管理共享变量,c++,c,multithreading,openmp,C++,C,Multithreading,Openmp,我正在尝试编写一个OpenMp程序。我有一个for循环,它迭代100次。我已经把它分成了10条线。每个线程运行10次迭代,并根据某些条件生成一些计数。因此,根据这个逻辑,每个线程将生成自己的计数 我只想将这个计数复制到一个变量,该变量将保存所有线程的所有计数之和。如果我们让这个变量(共享)写入循环,我想它会序列化线程。我只想将每个线程的最后计数复制到一个全局变量中。这样,我将只序列化10条赋值语句。我试图使用lastprivate,但我对如何根据自己的需求使用它感到困惑 这是我的密码 #prag

我正在尝试编写一个OpenMp程序。我有一个for循环,它迭代100次。我已经把它分成了10条线。每个线程运行10次迭代,并根据某些条件生成一些计数。因此,根据这个逻辑,每个线程将生成自己的计数

我只想将这个计数复制到一个变量,该变量将保存所有线程的所有计数之和。如果我们让这个变量(共享)写入循环,我想它会序列化线程。我只想将每个线程的最后计数复制到一个全局变量中。这样,我将只序列化10条赋值语句。我试图使用
lastprivate
,但我对如何根据自己的需求使用它感到困惑

这是我的密码

#pragma omp parallel for private(i) schedule(dynamic) shared(count)
for (i = 1; i <= 100 ; i++)
{
    if(i%2==0)
        count++; 
}
printf("Total = %d \n", count);
#专用(i)计划(动态)共享(计数)的pragma omp并行

对于(i=1;i你应该使用还原法

int count = 0;
int i;
#pragma omp parallel for private(i) schedule(dynamic) reduction(+:count)
for (i = 1; i <= 100 ; i++)
    if(i%2==0)
        count++; 
int count=0;
int i;
#pragma omp并行专用(i)计划(动态)缩减(+:计数)

对于(i=1;i你应该使用还原法

int count = 0;
int i;
#pragma omp parallel for private(i) schedule(dynamic) reduction(+:count)
for (i = 1; i <= 100 ; i++)
    if(i%2==0)
        count++; 
int count=0;
int i;
#pragma omp并行专用(i)计划(动态)缩减(+:计数)

对于(i=1;我能不能请你展示你的代码而不是用文字解释它?我很确定
reduce
子句就是你想要的。但是最好先发布一些代码。@DavidRobinson…和Massimiliano…我已经更新了…请评论…使用括号来提高代码的可读性你能展示你的代码而不是ex吗用文字解释?我很确定
reduce
子句就是你想要的。但是最好先发布一些代码。@DavidRobinson…和Massimiliano…我已经更新了…请评论…使用括号来提高代码的可读性