从未来对象数组std::vector中检索值

retrieving values from array of future objects, std::vector

本文关键字:vector 检索 std 未来 对象 数组      更新时间:2023-10-16

我收到一条错误消息,我不知道如何响应。我试图从未来对象的向量中检索值,然后输出它们,但我在确认是否检索值时遇到了问题。

代码:

  std::vector<std::future<double>> threadResults;
  int numThreads = 4;
  double output;
  for (int j=0; j<numThreads; j++) {
    threadResults.push_back(std::async(launch::async, someCalculation, array1, array2, dimension));
  }
  for (auto& fut : threadResults) {
    auto output = fut.get();
  }

我是std::vector的新手,所以我不确定如何将get()与之结合使用。一些研究让我陷入了循环的低谷,我不确定它是否有效。如果有人看到任何明显的错误,请告诉我,但我主要关心的是如何正确地将std::vectorfuture类一起使用。

这是我的错误信息:

/tmp/ccQ19btT.o: In function `std::thread::thread<std::__future_base::_Async_state_impl<std::_Bind_simple<double (*(double*, double*, double*, int))(double*, double*, double*, int)>, double>::_Async_state_impl(std::_Bind_simple<double (*(double*, double*, double*, int))(double*, double*, double*, int)>&&)::{lambda()#1}>(std::__future_base::_Async_state_impl<std::_Bind_simple<double (*(double*, double*, double*, int))(double*, double*, double*, int)>, double>::_Async_state_impl(std::_Bind_simple<double (*(double*, double*, double*, int))(double*, double*, double*, int)>&&)::{lambda()#1}&&)':
nonOptimizedNonThreaded.cpp:(.text._ZNSt6threadC2IZNSt13__future_base17_Async_state_implISt12_Bind_simpleIFPFdPdS4_S4_iES4_S4_S4_iEEdEC4EOS8_EUlvE_IEEEOT_DpOT0_[_ZNSt6threadC5IZNSt13__future_base17_Async_state_implISt12_Bind_simpleIFPFdPdS4_S4_iES4_S4_S4_iEEdEC4EOS8_EUlvE_IEEEOT_DpOT0_]+0x2d): undefined reference to `pthread_create'
collect2: error: ld returned 1 exit status

很抱歉长的水平滚动,让我知道是否有更好的格式。

以下是我的编译方式:

g++ threadingVector.cpp -o threadingVector -std=c++0x

如果这不是正确的答案,请告诉我,我会删除它以避免混淆其他人,但我昨天遇到了完全相同的问题,在编译器args中添加-phread成功了。尝试:

g++ -pthread threadingVector.cpp -o threadingVector -std=c++0x

在不同的体系结构上,std::thread&该公司将多线程的一些底层实现留给环境,而在linux上完成线程实现的一个流行库将是pthread。