加速std:.vector填充新的c ++ 11 std :: async

时间:2014-01-07 11:44:11

标签: c++11 vector stdasync

我正在使用vc ++ 2013 express版。 我正在研究c ++ 11的一些新功能,如std :: async和std :: future。

我有一个Foo类,std::shared_ptr<std::vector<unsigned int> >。 在Foo ctor中,我使用std :: make_shared在堆中分配向量;

来自Foo.h

Class Foo{
public:
  Foo();
private:
  std::shared_ptr<std::vector<unsigned int> >  testVector;
  unsigned int MAX_ITERATIONS = 800000000;
  void fooFunction();

}

来自Foo.cpp

Foo::Foo(){
testVector = std::make_shared<std::vector<unsigned int> >();
//fooFunction(); this take about 20 sec
 std::async(std::launch::async, &Foo::fooFunction, this).get(); // and this about the same!!
}


void Foo:fooFunction(){
  for (unsigned int i = 0; i < MAX_ITERATIONS; i++){
    testVector->push_back(i);       
  } 

}

问题是我在调用std :: async(std :: launch :: async,&amp; Foo :: fooFunction,this)之间看不到任何好处.get();和fooFunction();

为什么? 任何帮助将不胜感激。 最好的问候

1 个答案:

答案 0 :(得分:2)

std::async返回std::future

对未来调用get()会使其等到结果可用,然后返回。所以,即使它是异步运行的,你只是在等待结果。

std::async并没有神奇地并行化for中的Foo::fooFunction循环。