我正在尝试将2D数组传递给c ++线程。如果我理解得很好,我应该这样做:
double DDnx[Nx], AAnx[Nx], BBnx[Nx], CCnx[Nx], DDny[Ny], AAny[Ny],BBny[Ny], CCny[Ny];
double n[Nx][Ny], cO2[Nx][Ny];
double DtDbDxs, Dxs2;
thread th1(&ADI_N, n, cO2, AAnx, BBnx, CCnx, DDnx, AAny, BBny, CCny, DDny, DtDbDxs, Dxs2);
ADI_N函数接受所有这些参数。
void ADI_N(double n[][Ny], double cO2[][Ny],
double AAx[], double BBx[], double CCx[], double DDx[],
double AAy[], double BBy[], double CCy[], double DDy[], double DbDtDxs, double Dxs2);
我有一个错误:没有匹配的构造函数用于初始化' std :: __ 1 :: thread'
关键是我想通过引用ADI_N()来传递我的论点,以避免复制数据的时间。 当然只是在参数周围放置ref()不起作用
有什么想法吗?
一切顺利
/// EDIT ///
这是一个没有线程编译的例子
#include <iostream>
#include <iomanip>
#include <stdlib.h>
#include <stdio.h>
#include <string>
#include <thread>
using namespace std;
#define Nx 100
#define Ny 100
void ADI_N(double n[][Ny], double cO2[][Ny],
double AAx[], double BBx[], double CCx[], double DDx[],
double AAy[], double BBy[], double CCy[], double DDy[],
double DbDtDxs, double Dxs2)
{
//do things
}
int main()
{
double DDnx[Nx], AAnx[Nx], BBnx[Nx], CCnx[Nx], DDny[Ny], AAny[Ny],BBny[Ny], CCny[Ny];
double n[Nx][Ny], cO2[Nx][Ny];
double DtDbDxs, Dxs2;
//pass by pointer or ref the 2D matrix to the function ADI_N
thread th1(&ADI_N, n, cO2, AAnx, BBnx, CCnx, DDnx, AAny, BBny, CCny, DDny, DtDbDxs, Dxs2);
//ADI_N(n, cO2, AAnx, BBnx, CCnx, DDnx, AAny, BBny, CCny, DDny, DtDbDxs, Dxs2); //this compile
//th1.join();
}