如何在多线程c ++中传递多维数组
how to pass multidimensional array in multithreading c++
我试图创建多线程来处理 2 个多维数组:
vector<thread> tt;
for(int i=0;i<4;i++) tt.push_back(thread(th,arr1,arr2));
使用线程函数:
void th(int arr1[3][100][100], int arr2[100][100]) {
...
}
我也试过通过引用传递但也没有成功:
void th(int (&arr1)[3][100][100], int (&arr2)[100][100]) {
...
}
他们都给我一个 "no type named 'type' in 'class std::result_of void(* (int **[])..."
错误。有人可以告诉我如何在多线程中正确传递多维数组吗?
你原来的函数调用我觉得很奇怪,但下面的调用仍然可以编译并运行 g++-4.6.3
使用命令
g++ -lpthread -std=c++0x -g multiArray.cc -o multiArray && ./multiArray
然后 multiArray.cc
有
#include <iostream>
#include <thread>
#include <vector>
void th(int ar1[3][100][100], int ar2[100][100])
{
std::cout << "This works so well!\n";
}
int main()
{
int ar1[3][100][100];
int ar2[100][100];
std::vector<std::thread> threads;
for(int ii = 0; ii<4; ++ii)
{
threads.emplace_back(th, ar1,ar2);
}
for(auto & t : threads)
{
if(t.joinable())
{
t.join();
}
}
}
让我澄清一下,这段代码是可疑的;例如,如果您更改数组大小(而不更改数组维度),则此代码可以毫无问题地编译。
我试图创建多线程来处理 2 个多维数组:
vector<thread> tt;
for(int i=0;i<4;i++) tt.push_back(thread(th,arr1,arr2));
使用线程函数:
void th(int arr1[3][100][100], int arr2[100][100]) {
...
}
我也试过通过引用传递但也没有成功:
void th(int (&arr1)[3][100][100], int (&arr2)[100][100]) {
...
}
他们都给我一个 "no type named 'type' in 'class std::result_of void(* (int **[])..."
错误。有人可以告诉我如何在多线程中正确传递多维数组吗?
你原来的函数调用我觉得很奇怪,但下面的调用仍然可以编译并运行 g++-4.6.3
使用命令
g++ -lpthread -std=c++0x -g multiArray.cc -o multiArray && ./multiArray
然后 multiArray.cc
有
#include <iostream>
#include <thread>
#include <vector>
void th(int ar1[3][100][100], int ar2[100][100])
{
std::cout << "This works so well!\n";
}
int main()
{
int ar1[3][100][100];
int ar2[100][100];
std::vector<std::thread> threads;
for(int ii = 0; ii<4; ++ii)
{
threads.emplace_back(th, ar1,ar2);
}
for(auto & t : threads)
{
if(t.joinable())
{
t.join();
}
}
}
让我澄清一下,这段代码是可疑的;例如,如果您更改数组大小(而不更改数组维度),则此代码可以毫无问题地编译。