std::线程与 tbb - 使用 2 个或更少的参数构建

std::thread with tbb - builds with 2 or fewer arguments

本文关键字:参数 构建 线程 tbb 使用 std      更新时间:2023-10-16

我查看了线程构建块(分形.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 ;
    }'

因为来自 TBB 的 std::thread 构造函数只有 0、1 和 2 个参数函数的构造函数(参见 tbb/compat/thread 标头),它不像 c++11 那样可变std::thread