Код: Выделить всё
std::unordered_mapid()), std::atomic> visited;
#pragma omp parallel
{
#pragma omp for
for ...
#pragma omp critical
{
if (visited.find(next->id()) == visited.end()) {
next_frontier.push_back(next);
visited.emplace(next->id(), true);
}
}
}
}
Я попробовал
bool expected = false;
if (std::atomic_compare_exchange_weak(&visited[next->id()], &expected, true)) {
#pragma omp critical
next_frontier.push_back(next);
}
< /code>
Но я получаю: < /p>
- malloc (): несортированный двойной список поврежденных < /li>
Двойной свободный или коррупция (out) - Ошибка сегментации
Подробнее здесь: https://stackoverflow.com/questions/720 ... eak-in-bfs
Мобильная версия