首页 > 解决方案 > 为什么线程不接受这个输入?

问题描述

我正在做一个使用线程对一些矩阵求和的项目,但是在创建线程并添加参数时,它总是显示相同的错误。有任何想法吗?

void sum(std::vector <double>& matrix, std::vector <double>& other) {
    for (auto i = 0; i < 15; i++) {
        matrix[i] += other[i];
    }
}

这是线程应该做的操作。

std::vector <double>* mat1 = new std::vector <double>[15];
std::vector <double>* mat2 = new std::vector <double>[15];
std::vector <std::thread*> threads;

for (int j = 0; j < 15; j++) {
    sum(mat1[j], mat2[j]);                                          //this works;
    threads.push_back(new std::thread(sum,mat1[j],mat2[j]));        //this dont why?;
}

提前致谢

标签: c++multithreading

解决方案


要编译它,请更改:

std::thread(sum,mat1[j],mat2[j])

至:

std::thread(sum, std::ref(mat1[j]), std::ref(mat2[j]))

示例:https ://godbolt.org/z/Ek-cnm

但是除了编译之外,您的问题和代码还有多个问题,请听听其他人在评论中所说的话。


推荐阅读