以來的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
}
用'#pragma omp single'就是這個連線程有關嗎? – sehe
我回答。兩個鏈接:[選擇不破(http://www.codinghorror.com/blog/2008/03/the-first-rule-of-programming-its-always-your-fault.html)和[無人寫入測試用例了](http://kera.name/articles/2013/10/nobody-writes-testcases-any-more/) – sehe
它是'local_it =它++;','未= local_it ++它;' .... – kangshiyin