簡體   English   中英

C ++ 11線程隊列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM