std :: thread构造函数(变量数量)

时间:2013-11-05 12:13:47

标签: c++ multithreading c++11 vector stdthread

你好,我的程序有点问题(我希望用标量乘以数组)。

基本上我想创建一个线程向量,它将执行乘法员工(逐个元素)

代码示例

第一个mainImplementation函数

void mainImplementation(){

vector<thread> threads;
vector< vector<int> > result;
vector< vector<int> > tab;
vector<int> temp;
int row = 0;
int col = 0;
int scalar = 5;

loadDataFromFile(tab,temp,row,col);

int availableThreads = thread::hardware_concurrency();


    for(int i = 0; i < row; i++){

        for(int j = 0; j < col; j++){

            for(int t = 1; i <= availableThreads; t++){

                threads.push_back(thread(scalarMultiplication,std::ref(tab),
                    std::ref(result),std::ref(temp),std::ref(i),std::ref(j),std::ref(scalar)));
            }

        }
    }

}

现在实现标量乘法的函数

void scalarMultiplication(vector< vector<int> >& vtab, vector< vector<int> >& vresult, vector<int>& vtemp, int& i, int& j, int& scalar){

//...implementation

}

我还没有实现这部分,但我无法解决一个问题

在第

threads.push_back(thread(scalarMultiplication,std::ref(tab),
                    std::ref(result),std::ref(temp),std::ref(i),std::ref(j),std::ref(scalar)));

编译器说存在问题

“错误:没有构造函数std :: thread :: thread的实例匹配参数列表”。

我似乎无法解决这个问题。我确实读过我应该通过引用将变量传递给线程构造函数中的函数,所以我认为这不是问题。我传递给乘法函数6变量,所以它应该没问题,但它不是,我不知道该怎么做...谷歌不能帮助我,因为我搜索类似的问题。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

就像我想的那样,Visual Studio Ultimate 2012没有可变参数模板。默认值为5,因此您需要添加#define来增加限制(最大值为10):

#define _VARIADIC_MAX 10