2013-06-06 33 views
1

我正在使用std :: async同时启动几个任务(4),启动后我等待任务完成使用std :: future objects。问题是,当我看到系统监视,看起来已经创建了超过13个线程并且不终止。std :: async:即使任务完成,创建的线程仍然还活着?

下面是一段代码:

System system; 
std::vector<Compressor> m_compressorContainer(4); 
std::vector<future<void> > m_futures(4); 

while(system.isRunning()) 
{ 

int index=0; 

//launch one thread per compressor 
for (auto &compressor : m_compressorContainer) 
{ 
    m_futures[index++] = std::async(std::launch::any, &Compressor::process, compressor); 
} 

//wait for results 
std::for_each(m_futures.begin(),m_futures.end(), [](std::future<void> &future){ future.get(); }); 

} 

因为我在等待每个线程的结束,我期待该线程的数量将永远是4,而不是13

无想法?

+3

'async'对使用什么线程(如果有)以及它们如何管理没有任何承诺。 –

+1

另外,为什么'for_each'?只是'for(auto&f:futures)f.get();'。 –

+0

好吧,关于线程,我期待那个,在调用future.get()之后,线程将会结束并且不会仍然活着。 – user2458798

回答

2

线程和内存一样,可以保存在库中以供将来重用。例如。不保证将delete p;内存还给系统。

相关问题