std :: async:即使任务完成,创建的线程仍然存活?

时间:2013-06-06 08:42:55

标签: c++ multithreading asynchronous c++11 future

我目前正在使用std :: async以同时启动多个任务(4),在启动后我等待任务完成使用std :: future对象。问题是当我看到系统时监视,似乎已经创建了超过13个线程,并且没有终止。

这是一段代码:

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。

不知道?

1 个答案:

答案 0 :(得分:2)

线程与内存一样,可以由库保存,以便将来重用。例如。 delete p;无法保证将内存返回给系统。