在下面的代码中,OpenMP运行时是重新创建线程还是重用先前创建的线程 - 即使用线程池?
有些同事认为它会重新创建线程,因为“#parallel”子句嵌套在for;我对此表示怀疑并对GDB进行了一些测试,这表明这不是事实。线程实际上被重用了。
#include <cstdio>
#include <omp.h>
#include <unistd.h>
void fun1() {
for (int j=1; j<=5; j++) {
#pragma omp parallel for
for (int i=1; i<=5; i++) {
printf("Hahaha %d -> %d\n", omp_get_thread_num(), i);
}
}
}
void fun2() {
for (int j=1; j<=5; j++) {
#pragma omp parallel for
for (int i=1; i<=5; i++) {
printf("Hahaha %d -> %d\n", omp_get_thread_num(), i);
}
}
}
int main() {
fun1();
sleep(1);
fun2();
return 0;
}
答案 0 :(得分:0)