我在我的代码中有一个函数,它不是主函数并使用线程。程序运行时称为数千次。它看起来像这样当一个C++ 11函数加入它的线程仍然没有终止时,它会返回吗?
void my_function(vector<string> input, vector<string> &results)
{
results.clear();
results.resize(input.size());
vector<thread> th;
th.resize(input.size());
for(int i=0; i<input.size();i++)
{
th[i]=thread(fold, input,ref(results), i);
}
for(auto & t : th)
{
t.join();
}
}
的fold
函数将一个字符串,从入门的input
i
衍生到output
的进入我。我想确保何时my_function返回所有线程都被终止。我问这个问题的原因是,在对这个函数进行并行处理之后,我得到了巨大的内存泄漏,并且怀疑线程保留了这些资源。
是的所有线程函数都必须返回'join'调用返回。所有'join'调用都必须在'my_function'返回之前返回。与'std :: thread'对象关联的所有资源都将在相应的'join'调用或者对象被破坏时释放(这是从'my_function'返回的一部分完成的)。 ***但是,如果线程函数明确地分配了它不释放的资源,那么这些资源将不会自动清理。 –
@Reza也应该保护'结果'免受并行访问。为了避免这个问题,你也应该对结果进行调整大小,并且每个线程都应该知道它的编号,所以它会修改为它分配的变量,假设每个线程都产生一个结果字符串 – Arkady
MCVE。 fold做什么? – SergeyA