是否有可能在Cx11中使用std :: async生成?

时间:2014-11-21 19:55:03

标签: c++ multithreading asynchronous

不熟悉线程开发,如果这很明显,请原谅。 我正在使用MS VS 2013,Cx11。问题涉及异步任务以及调用异步(或后来的future.get()实际产生的线程数。如果我有一个自包含的功能:

int PewPewPew(int k)
{
    std::this_thread::sleep_for(std::chrono::seconds(1));
    return k;
}

这被称为LARGE_MAX次:

vector<future<int>> futures;

int LARGE_MAX = 1000000;
for (int i = 0; i < LARGE_MAX; ++i)
    futures.push_back(async(PewPewPew, i));

int total = 0;
for (auto &f : futures)
    total += f.get();
cout << "Total: " << total << endl;

是否有某种&#34; smart&#34;线程管理不会产生运行此代码的线程数?我在大多数台式机上假设LARGE_MAX concurent线程效率不高?

谢谢!

更新:我想澄清(来自评论):我知道使用std ::完成上述任务有不同的方法。但据我所知,函数PewPewPew()构成一个任务,因此可以如上所述使用。那么我的问题就是上面的代码会导致“低效的线程”#34;如果LARGE_MAX大于当前系统的最佳线程数。

0 个答案:

没有答案