我正在使用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;
答案 0 :(得分:2)
parallel
结构的末尾有隐式屏障,因此不需要同步。任何进一步的代码仅由主线程(在并行区域内具有thread_num == 0
的线程)执行,并且仅在所有线程到达并行区域的末尾之后才执行。