我希望使用std::async
并行执行许多任务。那些任务lambda会修改一个对象。我知道由std::async
实现决定如何处理任务。我也明白,通过指定std::launch::async
我可以强迫"强迫"并行执行。
令我疑惑的是,鄙视我所有其他核心无所事事,实施仍然决定不并行运行任务。我绝对会对串行执行感到满意,但前提是我的其他内核都很忙。
对我来说,与std::thread
相比,它会以某种方式消除这种感觉 - 特别是如果你仍然关心超额认购。这个行为是否有一点我错过了?
我以这种方式做这项工作,如果相关的话:
std::vector<std::future<void>> futs;
for(size_t i=0; i<someNumber; ++i)
futs.emplace_back( std::async(std::launch::async, someLambda, i) );
for(auto& fut : futs)
fut.get(); // they return nothing, but I need to make sure they have executed.
修改:
与默认策略相比,std::launch::asyc
的执行时间约为1/4。我有4个核心。
这是我使用的库和gcc版本:
$ /sbin/ldconfig -p | grep stdc++
libstdc++.so.6 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libstdc++.so.6
libstdc++.so.6 (libc6) => /usr/lib/i386-linux-gnu/libstdc++.so.6
$ g++ --version
g++ (Ubuntu 5.2.1-22ubuntu2) 5.2.1 20151010