在omp parallel块之外使用类似于critical、single、master或barrier的omp pragmas是否可行?我有一个函数可以从OMP parallel块中调用,也可以不调用。如果是,则需要将部分代码包含在关键部分中。换句话说,这段代码是否正确?
void myfunc(){
#pragma omp critical
{ /* code */ }
}
// not inside an omp parallel region
myfunc();
#pragma omp parallel
{
// inside an omp parallel region
myfunc();
}
我在OpenMP文档中没有找到相关内容。我猜测代码的行为应该与单线程执行完全相同 - 这也是gcc的工作方式。我想知道这种行为是否可移植,或者它是否是规范未定义的东西,任何结果都可能出现。