从线程输出简单向量

时间:2018-04-06 20:04:00

标签: c++ multithreading

我目前正在尝试理解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。如果有人有任何指针或更简单的方法来执行此操作,他们将非常感激。

感谢您的时间。

1 个答案:

答案 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();
}