下一个代码崩溃,因为其中一个 OpenMP 任务删除了it
. 我该如何解决这个问题?代码必须使用 OpenMP 任务来实现。
#pragma omp parallel
{
#pragma omp single nowait
{
for (std::list<Class*>::iterator it = myClass.begin(); it != myClass.end();) {
if ((*it)->getNumber() == 0) {
#pragma omp critical
it = myClass.erase(it);
}
else {
#pragma omp task firstprivate(it)
{
bool result = (*it)->function(t);
if ( result ) {
#pragma omp critical
it = myClass.erase(it);
}
}
}
++it;
}
}
#pragma omp taskwait
}