c++ - 从 future 对象数组中检索值,std::vector

标签 c++ multithreading

我收到一条错误消息,但我不知道如何回复。我正在尝试从 future 对象的 vector 中检索值,然后输出它们,但我无法确认我是否正在检索这些值。

代码:

  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

最佳答案

如果这不是正确的答案,请告诉我,我将删除它以避免混淆其他人,但我昨天遇到了完全相同的问题并且将 -pthread 添加到编译器参数中起作用了。尝试:

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

在不同的体系结构上,std::thread 和公司将多线程的一些低级实现留给了环境,而一个可以在 linux 上完成线程实现的流行库是 pthread。

关于c++ - 从 future 对象数组中检索值,std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33769812/

相关文章:

c++ - CUDA 拆分字符数组

c# - 服务器和客户端之间以两种方式进行进程间通信的最佳方式

java - 三线程通信与同步

c# - 添加词典条目时出现异常

c++ - 当数据存储为 uint8_t vector 时如何传递 'char* data'?

c++ - 是否可以在编译时获取时间(当天)和日期?

PHP 7 C++ 扩展。指定的模块无法找到

c++ - QTabWidget 拒绝自动调整大小

java - 为什么我的 threadExecutor 调用同一个回调两次?

c# - WPF-在循环更新UI时播放声音