Как решить состояние гонки в OpenMP? ⇐ C++
-
Anonymous
Как решить состояние гонки в OpenMP?
bool ClusterExists(std::string& infoSet) { bool существует {ложь}; #pragma omp критично существует = mInfoMap.find(infoSet) != mInfoMap.end(); возврат существует; } InfoSet* get(std::string& infoSet, const int& numActs, Env::History& action) { if (numActs > 0 && mCreateNotExists && !clusterExists(infoSet)) { #pragma omp критично { mInfoMap.insert({infoSet, новый InfoSet {numActs}}); for (auto& a : действия) { mInfoMap[infoSet]->insertActStr(Env::ActToStr(std::get(a)), std::get(a)); } } } вернуть mInfoMap[infoSet]; } Я считаю, что проблема во «вставке». Проблема в том, что карта является «контейнером STL» и ей нужна блокировка?
bool ClusterExists(std::string& infoSet) { bool существует {ложь}; #pragma omp критично существует = mInfoMap.find(infoSet) != mInfoMap.end(); возврат существует; } InfoSet* get(std::string& infoSet, const int& numActs, Env::History& action) { if (numActs > 0 && mCreateNotExists && !clusterExists(infoSet)) { #pragma omp критично { mInfoMap.insert({infoSet, новый InfoSet {numActs}}); for (auto& a : действия) { mInfoMap[infoSet]->insertActStr(Env::ActToStr(std::get(a)), std::get(a)); } } } вернуть mInfoMap[infoSet]; } Я считаю, что проблема во «вставке». Проблема в том, что карта является «контейнером STL» и ей нужна блокировка?
Мобильная версия