从线程输出简单向量
Outputting Simple Vectors from Threads
我目前正在尝试了解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();
}
相关文章:
- 有没有一种简单的方法可以在对象向量上调用构造函数?
- 有没有一种简单的方法可以在C++中获取特定索引之后向量中的所有项目?
- 从线程输出简单向量
- 为什么简单的C++向量函数会产生越界的下标
- 有没有办法简单地连接多个向量
- 我如何简单地打印一个向量
- swig:接口简单的C 类,返回向量
- (简单C++)从文件中获取带有向量的矩阵
- 这个带有向量的简单代码有什么问题?
- C++简单的程序 - 为什么我的"res"不进入我的向量?创建一个接受输入 (4+44-67+235) 并输出结果的程序
- C++中的向量:为什么这个简单的复制和打印程序出现这么多错误?
- 一个简单的向量,如何正确重新分配新数组的地址
- c++ 中带有简单构造函数的向量和自定义类的问题
- 递归对向量进行排序的最简单方法
- C++11 中的简单向量初始化返回奇怪的错误
- 为简单向量实现复制构造函数
- 如何在c++中使用向量实现一个简单的树,没有二进制或avl树
- C++中带有向量的简单散列映射
- 用于保存一类向量或SQL数据库的简单文件
- 将数组转换为向量的最简单方法是什么