线程c ++的二维数组参数

时间:2017-12-06 20:13:51

标签: c++ arrays multithreading 2d

我正在尝试将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();

}

0 个答案:

没有答案