我目前正在尝试理解C ++中的多线程,并希望从多个线程返回单独的向量,以便可以同时运行多个for循环,我目前有以下代码,并且正在努力处理文档,< / p>
#include <thread>
#include <iostream>
#include <vector>
#include <future>
using namespace std;
vector<int> task1(vector<int> v) {
for(int i = 0; i<10; i++)
{
v[i] = i;
}
}
vector<int> task2(vector<int> v) {
for(int i = 10; i<20; i++)
{
v[i] = i;
}
}
int main ()
{
packaged_task<vector<int>()> taskA{task1};
packaged_task<vector<int>()> taskB{task2};
future<vector<int>()> future = taskA.get_future();
future<vector<int>()> future2 = taskB.get_future();
thread t1{move(taskA)};
thread t2{move(taskB)};
t1.join();
t2.join();
return 0;
}
这段代码的目的是得到两个向量 - 一个用0-9,另一个用10-19。如果有人有任何指针或更简单的方法来执行此操作,他们将非常感激。
感谢您的时间。
答案 0 :(得分:0)
异步可能是最简单的。你的函数需要返回一个向量,而不是一个作为参数。我将它编码为lambda,但常规函数同样好。问你是否有问题。
#include <thread>
#include <future>
#include <vector>
int main() {
using namespace std;
using intvec = vector<int>;
auto f= [](int start) {
intvec s;
for (int i = 0; i < 10; ++i)
s.push_back(start + i);
return s;
};
auto f1 = async(f, 0);
auto f2 = async(f, 10);
intvec s1 = f1.get();
intvec s2 = f2.get();
}
......或者如果您愿意......
#include <thread>
#include <future>
#include <vector>
using namespace std;
vector<int> task1() {
vector<int> v;
for(int i = 0; i<10; i++)
{ v.push_back(i);}
return v;
}
vector<int> task2() {
vector<int> v;
for(int i = 10; i<20; i++)
{ v.push_back(i);}
return v;
}
int main() {
auto f1 = async(task1);
auto f2 = async(task2);
vector<int> s1 = f1.get();
vector<int> s2 = f2.get();
}