C++ 如何使用OpenMP让线程以相反的顺序写入数字?

C++ 如何使用OpenMP让线程以相反的顺序写入数字?,c++,openmp,C++,Openmp,所以我有一个任务。我需要做8个线程,让他们写他们的数字在相反的顺序。我知道如何让他们按照自然的顺序写作,但我真的对相反的顺序感到困惑。希望有人能帮助我 我真的不明白你问的目的,但这是有效的 #include "omp.h" #include <iostream> using namespace std; int main() { #pragma omp parallel { int nthreads = omp_get_num_threads();

所以我有一个任务。我需要做8个线程,让他们写他们的数字在相反的顺序。我知道如何让他们按照自然的顺序写作,但我真的对相反的顺序感到困惑。希望有人能帮助我

我真的不明白你问的目的,但这是有效的

 #include "omp.h"
 #include <iostream>
 using namespace std;
 int main()
 {

#pragma omp parallel
{
      int nthreads = omp_get_num_threads();
      for(int i=nthreads-1; i>=0; i--)
      {
            #pragma omp barrier
            {
                  if(i==omp_get_thread_num())
                  {
                        #pragma omp critical
                        cout << "I am thread "<< i <<endl;
                  }
            }
      }
}
}

那么请至少按自然顺序显示代码。请注意:如果您需要线程按特定顺序执行其工作,您应该重新考虑是否确实需要单独的线程。我想这只是一个练习,虽然这是一个愚蠢的练习,但你需要展示一些代码。你说“我知道如何让他们按自然顺序写作”。你至少可以显示代码。展示你尝试过做的事情。为什么需要相反顺序的线程?我不会对算法的最终状态的要求感到惊讶,但是一个具体的例子会有所帮助。我真的不认为这是正确的(除了它与可访问的线程数有关),你能解释一下吗?谢谢!思想障碍应该以某种方式使用,但不知道如何使用。我甚至不知道这个问题,所以评估它是否正确只能由Peltatum完成。也许你认为“pragma omp critical”太过分了。你可能是对的,这是过度保护。。。
I am thread 7
I am thread 6
I am thread 5
I am thread 4
I am thread 3
I am thread 2
I am thread 1
I am thread 0