我试图在不同线程的循环中运行cpp代码,并希望我的主线程等到所有其他线程完成。我是这样做的:
MyClass {
function(Obj1& res, Obj2& input);
}
AnotherClass {
MyClass class;
anotherFunction(int size) {
Obj1* resvec = new Obj1[size];
Obj2* inputvec = new Obj2[size];
doSmth1(resvec, inputvec);
thread* thpool = new thread[size];
for(int i = 0; i < size; ++i) {
thpool[i] = thread(MyClass::function, class, ref(resvec[i]), ref(inputvec[i]));
}
for(int i = 0; i < size; ++i) {
thpool[i].join();
}
doSmth2(resvec);
}
}
但是代码会返回错误的答案,但是,如果我喜欢这个
MyClass {
function(Obj1& res, Obj2& input);
}
AnotherClass {
MyClass class;
anotherFunction(int size) {
Obj1* resvec = new Obj1[size];
Obj2* inputvec = new Obj2[size];
doSmth1(resvec, inputvec);
thread* thpool = new thread[size];
for(int i = 0; i < size; ++i) {
thpool[i] = thread(MyClass::function, class, ref(resvec[i]), ref(inputvec[i]));
thpool[i].join();
}
doSmth2(resvec);
}
}
代码返回正确答案,但没有给出速度优势。似乎我在代码中做错了什么,有人可以帮助我吗?谢谢! problem occurs when I call scheme.multModSwitchAndEqualVec
答案 0 :(得分:-1)
当你加入主线程时将等到线程完成,所以如果你在循环上运行那么main将等待每个线程完成。 我想你要做的是让所有的线程分离,但是当(i == size-1)让他加入时。
答案 1 :(得分:-2)
使用sleep()函数简单地增加主线程的休眠时间。