前景提要
我想用 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(); }
网上找了大多是基础用法和线程池,并不能达到我想要的全核心并发处理。
这里先感谢各位了!