Я хочу разбить вектор на маленькие векторы, обрабатывать каждый из них отдельно по потоку, а затем объединить их. Я хочу использовать std::async
для создания потоков и мой код выглядит как этотstd :: async - аргумент вектор поврежден
void func(std::vector<int>& vec)
{
//do some stuff
}
// Calling part
std::vector<std::future<void>> futures;
std::vector<std::vector<int>> temps;
for (int i = 1; i <= threadCount; ++i)
{
auto& curBegin = m_vec.begin() + (i - 1) * size/threadCount;
auto& curEnd = m_vec.begin() + i * size/threadCount;
std::vector<int> tmp(curBegin, curEnd);
temps.push_back(std::move(tmp));
futures.push_back(std::async(std::launch::async, &func, std::ref(temps.back())));
}
for (auto& f : futures)
{
f.wait();
}
std::vector<int> finalVector;
for (int i = 0; i < temps.size() - 1; ++i)
{
std::merge(temps[i].begin(), temps[i].end(), temps[i + 1].begin(), temps[i + 1].end(), std::back_inserter(finalVector));
}
Здесь m_vec
главного вектор, который раскалывается на мелкие векторы. Проблема в том, что когда я передаю вектор в func()
, в функции он становится недействительным, либо размер равен 0, либо с недопустимыми элементами. Но когда я пытаюсь вызвать функцию без std::async
, все работает нормально.
Так в чем проблема с std::async
и есть ли что-нибудь особенное, что я должен был сделать?
Благодарим вас за внимание!
Большое спасибо! – nabroyan