从线程输出简单向量

Outputting Simple Vectors from Threads

本文关键字:向量 简单 输出 线程      更新时间:2023-10-16

我目前正在尝试了解C++中的多线程,并希望从多个线程返回单独的向量,以便可以同时运行多个 for 循环,我目前有以下代码,并且正在努力处理文档,

#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。如果有人有任何指示或更简单的方法来执行此操作,他们将不胜感激。

谢谢你的时间。

异步可能是最简单的。你的函数需要返回一个向量,而不是将一个向量作为参数。 我将其编码为 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();
}