使用并行线程的矩阵乘法

时间:2015-08-27 13:49:48

标签: c++ multithreading c++11

我正在使用多线程编写矩阵乘法代码。

代码在没有多线程的情况下工作正常。当我添加行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
        }
    }

}

1 个答案:

答案 0 :(得分:3)

你的应用程序崩溃的直接原因是thread()对象必须是分离的或连接的,否则,它的析构函数会抛出异常。退出最内循环时会发生这种情况。

由于我通常不建议分离线程,因此最好的解决方案是使用线程对象的向量,并在创建时将线程移动到此向量中。最后,只需加入向量中的所有线程。