[英]C++11 Thread Queue
我希望能夠推出一大堆線程:
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
),它們都會立即運行,並且事情效率不高。 我該怎么做類似的事情:啟動所有線程,但只運行一些(比如我的計算機上的核心數),當一個線程死掉時,啟動另一個線程。
標准C ++將when_any()
函數添加為future
的隊列。 請參閱以下文章。
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3784.pdf
傳遞std :: launch :: async | std :: launch ::延遲到std :: async之類的
std::async(std::launch::async | std::launch::deferred, some_computationally_expensive_function)
在Visual Studio 2013中做了這個技巧,但是從Visual Studio 2015開始就沒有。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.