我正在使用多线程编写矩阵乘法代码。
代码在没有多线程的情况下工作正常。当我添加行t.join()
时代码有效,但这样做不会使代码并行化。
所有线程都会等待他们的前任完成。我想并行执行它们。
运行时错误:
libc++abi.dylib: terminating
Abort trap: 6
当我在SO镜像中查找错误时,几乎所有这些都面临分段错误而导致这种错误。
注意:我正在使用带有gcc(clang)的mac机器。
这是我的代码:
void multiply (int a[][N],int b[][N],int n,int m,int p,int result[][N])
{
int i,j,k;
for (i=0;i<n;i++)
{
for (j=0;j<p;j++)
{
thread t(multiplyParallely,a,b,m,i,j,result);
// t.join(); // Works When i add this line.But that doesnt parallelise.
//multiplyParallely(a,b,m,i,j,result); // Obviously This Works
}
}
}
答案 0 :(得分:3)
你的应用程序崩溃的直接原因是thread()对象必须是分离的或连接的,否则,它的析构函数会抛出异常。退出最内循环时会发生这种情况。
由于我通常不建议分离线程,因此最好的解决方案是使用线程对象的向量,并在创建时将线程移动到此向量中。最后,只需加入向量中的所有线程。