OpenMP多线程成为一个线程

时间:2017-11-09 07:56:06

标签: multithreading openmp

我正在使用OpenMP进行编程以了解多线程。任何线程(在这种情况下是11的任何线程)是否有可能在结束时到达return语句,而某些线程可能仍在处理for循环中的某些内容?或者它们在第13行之后再次成为一个主线程?

int np, iam;
#pragma omp parallel private(np, iam) num_threads(11)
{
    np = omp_get_num_threads();  
    iam = omp_get_thread_num();  

    #pragma omp for
    for (int i = 2; i < 100; i++) {
        std::cout << i;
        doStuff(i);
        }
    }
}     // line 13
// synchronize necessary?
return 0;

1 个答案:

答案 0 :(得分:2)

parallel结构的末尾有隐式屏障,因此不需要同步。任何进一步的代码仅由主线程(在并行区域内具有thread_num == 0的线程)执行,并且仅在所有线程到达并行区域的末尾之后才执行。