我收到一条错误消息,我不知道如何回应。我正在尝试从未来对象的向量中检索值,然后输出它们,但是我无法确认我是否正在检索这些值。
代码:
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()
。一些研究将我带到了底层for-loop,我不确定它是否正常工作。如果有人发现任何明显的错误,请告诉我,但我主要关注的是如何正确使用std::vector
类future
。
这是我的错误消息:
/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
答案 0 :(得分:0)
如果这不是正确答案,请告诉我,我会删除它以避免让其他人感到困惑,但我昨天遇到了完全相同的问题,并将-pthread添加到编译器args工作。尝试:
g++ -pthread threadingVector.cpp -o threadingVector -std=c++0x
在不同的架构上,std :: thread&amp;公司将一些低级别的多线程实现留给了环境,一个流行的库将完成linux上的线程实现将是pthread。