如何在OpenMp中管理共享变量

我正在尝试编写一个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); 

你应该使用减少

 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++;