вектор c ++ векторов атомарного записи и чтения с потоками - PullRequest
0 голосов
/ 01 июня 2018

У меня есть проблема, и, похоже, я не могу ее решить.

У меня есть два вектора векторов, в которых я храню данные.Но я также использую потоки для ускорения обновления значений (размер неизменен, просто если число меньше оригинала, которое он переписывает в него).

Но потоки неправильны без атомарности.

Можете ли вы помочь мне в том, что мне делать?

  1. Должен ли я использовать просто std :: atomic_int Если так, то как мне использовать функции загрузки и сохранения или, может быть,что-то другое?Я передаю свои векторы в поток, как в .h:

    void for_thread_function(std::vector<std::vector<int>> * DATA1,td::vector<std::vector<int>> * DATA2 /*other params*/)

    в .cpp:

    std::thread thread (&MY_PROBLEM::for_thread_function, this, &DATA1, &DATA2, /*other params*/);

  2. Должен ли я использовать mutex-es?Тогда какой, и снова, как использовать его на двух источниках данных?Или вы можете привести небольшой пример: я вообще не использовал немцы (?).

  3. Должен ли я использовать комбинацию первых двух?И как ??

  4. Другое

Не могли бы вы объяснить, почему является лучшим вариантом ?

Спасибо за вашу помощь. Я действительно заблудился в лесу об этом материале.

РЕДАКТИРОВАТЬ: Я использую потоки для вычисления BFS из другой начальной точки.Поэтому мне нужно пройти всю матрицу.У меня есть относительно большие наборы данных (одна таблица с ценой, а другая - с которой отправная точка является ближайшей вершиной)

...