带有tbb的std :: thread - 使用2个或更少的参数构建

时间:2016-07-14 20:40:10

标签: c++ multithreading tbb

我查看了线程构建块(fractal.cpp)中包含的分形示例,并提出了这种结构。奇怪的是 - 如果我只在函数中传递2个参数,这是有效的。如果我将它增加到三个参数,则无法编译。我怀疑它在原始案例中也应该失败 - 但事实并非如此。为什么它只有2个参数也不会失败?或者我如何使用3个参数?

    #include <iostream>
    #include <ctime>
    #include <cstdlib>
    #include <vector>
    #include <tbb/compat/thread>

    void tt(int, int); //, int) ;//fails if 3rd int added

    int main(int argc, char** argv) {

       int numthreads = 4 ;
       int inta = 0 ;
       int intb = 1 ;

       std::vector <std::thread *> mythreads(numthreads) ;

       int ic ;
       for (ic = 0; ic < numthreads-1 ; ++ic)
       {
           mythreads[ic] = new std::thread(tt,ic, inta) ; // , intb ) ;
       }

       tt(ic, inta) ; //, intb) ;

       for (int ic = 0 ; ic < numthreads-1 ; ++ic)
          mythreads[ic]->join() ;

       std::cout << "all done" << std::endl ;
    }
    void tt( int myid, int intb) // , int intc)
    {
       std::cout << "entry " << myid << std::endl ;
    }'

1 个答案:

答案 0 :(得分:0)

因为来自TBB的std::thread的构造函数只有0,1和2参数函数的构造函数(参见tbb / compat / thread header),所以它不像c ++ 11那样变量{{1} 1}}