cpp如何使主线程等待,直到其他线程在循环中完成

时间:2017-06-07 06:53:31

标签: c++ multithreading

我试图在不同线程的循环中运行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

method implemented in Scheme

2 个答案:

答案 0 :(得分:-1)

当你加入主线程时将等到线程完成,所以如果你在循环上运行那么main将等待每个线程完成。 我想你要做的是让所有的线程分离,但是当(i == size-1)让他加入时。

答案 1 :(得分:-2)

使用sleep()函数简单地增加主线程的休眠时间。