C

时间:2017-03-09 01:49:15

标签: c multithreading matrix

我在Linux上使用C进行矩阵乘法,特别是使用pthread。这是我的代码。它无法运行,它只打印出一次空矩阵并表示分段错误。任何人都可以指出错误吗?谢谢。

#include <pthread.h>
#include <stdlib.h>
#include <stdio.h>

#define NUM_THREADS 9
int A[3][3] = {{2,5,6},{2,12,10},{6,1,8}};
int B[3][3] = {{7,5,1},{17,0,13},{3,2,5}};
int answer[3][3]={0};

void *multiply (void *param);
void print_matrix (int m[3][3]);

void print_matrix (int m[3][3]) {
    int i, j;
    for (i = 0; i < 3; i++) {

            for (j = 0; j < 3; j++)
            printf("%d\t ", m[i][j]);
    printf("\n");
    }
}

void *multiply (void *param) {
    int i, j, k;
    for(i = 0; i < 3; i++)
    {
            for(j = 0; j < 3; j++)
            {
                    for(k = 0; k < 3; k++)
                    {
                            answer[i][j] +=  A[i][k] *  B[k][j];
                    }
            }
    }
    pthread_exit(NULL); 
}

int main() 
{
    pthread_t tid[NUM_THREADS];
    int i, j;
    for (i = 0; i < NUM_THREADS; i++) { 
        pthread_attr_t attr; /* set of attributes for the thread */
        pthread_attr_init(&attr);/* get the default attributes */
        pthread_create(&tid[i],&attr,multiply,NULL);
    }

    for (j = 0; j < NUM_THREADS; j++) {
        pthread_join(tid[i],NULL);
        print_matrix(answer);
    }


}

1 个答案:

答案 0 :(得分:0)

您正在同时运行所有9个线程,这些线程正在访问相同的全局变量。这可能会产生问题。在调用线程后尝试施加一小段时间延迟。 sleep(1);可以做到这一点。或者使用某些机制,如互斥/信号量