我想用 thread 并发处理 for 循环,但总是 join 放在循环外就会出错,是 lambda 的问题吗?
vector<thread> threads;
for (int k = 1; k < d; k++)
{
thread t1([&](){
A_result[k] = Linear_Transform_Plain(A_result[0], params);
});
thread t2([&](){
B_result[k] = Linear_Transform_Plain(B_result[0], params);
});
threads.push_back(t1);
threads.push_back(t2);
// join 在里面就不会出错
// t1.join();
// t2.join();
}
for(auto i = threads.begin(); i != threads.end(); i++){
i->join();
}
报错:
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
Aborted (core dumped)
尝试过换用thread threads[14]
然后索引赋值的方法,报错:
terminate called recursively
Aborted (core dumped)
然后不用 lambda 就可以运行,但获取不到返回值了
thread threads[14];
for (int k = 1; k < d; k++)
{
threads[k-1] = thread(Linear_Transform_Plain, A_result[0], params);
threads[k-1+7] = thread(Linear_Transform_Plain, B_result[0], params);
}
for (int k = 1; k < d; k++)
{
threads[k-1].join();
threads[k-1+7].join();
}
网上找了大多是基础用法和线程池,并不能达到我想要的全核心并发处理。
这里先感谢各位了!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.