我想将一个向量分成小向量,在线程上分别处理它们,然后合并它们。我想用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 2014-12-07 07:25:26