-1
LinuxでCで行列乗算を行い、特にpthreadを使用しています。ここに私のコードです。それは実行に失敗し、空の行列を1回だけ印刷し、セグメンテーション・エラーを示しました。誰かが間違いを指摘できますか?ありがとうございました。Cでのマルチスレッド行列の乗算
#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);
}
}
自分でデバッグしましたか?デバッガおよび/またはデバッグプリントステートメントの使用。あなたは何を見つけましたか? – kaylum
データをスレッドにどのように渡していますか? 9スレッドが同じデータを同時に操作するので、競合状態をどうやって防ぐのですか? 2つのアレイを9回掛け合わせていないことをどうやって確認していますか? –
なぜ同じことをして同じ変数を書く 'multiply()'の9つのスレッドを実行していますか? – alvits