Уменьшить критический раздел 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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