我希望能够启动一大堆线程:
futures_que< std::future< ret_value > > fq;
for ( auto a: some_very_large_container )
fq.push_back( std::async( std::launch::async, some_computationally_expensive_function, a));
std::vector< ret_value > values;
for ( auto f: fq ) {
f.wait();
values.push_back( f.get() );
}
然而,如果我这样幼稚地做(例如使用
futures_que
作为std::vector
),它们将全部同时运行,效率并不高。如何做类似的事情:启动所有线程,但仅运行几个(例如计算机上的核心数),当一个线程死亡时,启动另一个线程。
when_any
来知道何时启动新线程。 - JHBonarius