Уменьшить критический раздел OMP для сравнения_EXCHANGE_WEAK в BFSC++

Программы на C++. Форум разработчиков
Anonymous
Уменьшить критический раздел OMP для сравнения_EXCHANGE_WEAK в BFS

Сообщение Anonymous »

У меня есть эта рабочая реализация BFS. < /p>

Код: Выделить всё

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);
}
}
}
}
Могу ли я каким-то образом уменьшить этот критический раздел для сравнения_exchange_weak ?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) < /li>
ошибка сегментации < /li>
< /ul>

Подробнее здесь: https://stackoverflow.com/questions/720 ... eak-in-bfs

Вернуться в «C++»