std :: async总是在同一个线程上执行,我的其他内核什么都不做

时间:2016-10-16 13:12:23

标签: c++ c++11 asynchronous concurrency future

我希望使用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

0 个答案:

没有答案