我是一名初學者,主要使用線程編程和C,我試圖找出如何使用Pthreads進行簡單的矩陣乘法。我想爲每列創建一個線程,並將結果放入結果矩陣中。我試圖動態地做到這一點,這意味着用戶可以使用輸入作爲大小來創建兩個n×n矩陣。使用Pthreads進行動態矩陣乘法
我的代碼,現在,不包括填充所述矩陣和讀取大小n爲執行以下操作:
#include <pthread.h>
#include <stdio.h>
#include<stdlib.h>
typedef struct Matrix {
int line, col, size;
double (*MA)[];
double (*MB)[];
double (*MC)[];
} Matrix;
void *multiply(void *arg) {
Matrix* work = (Matrix*) arg;
int s, z;
s = work->col;
z = work->line;
work->MC[0][0] = 0.0.//can't use MC, MB, MA here!!
return 0;
}
int main() {
Matrix* m;
//read size and set it to int size (miissing here, does work)
double MA[size][size], MB[size][size], MC[size][size];
int i, j;
//filling the matrices (missing here, does work)
pthread_t threads[size];
for (i = 0; i < size; i++) {
m = malloc(sizeof(Matrix*));
m->size = size;
m->col = i;
pthread_create(&threads[i], NULL, multiply, m);
}
for (i = 0; i < size; i++) {
pthread_join(threads[i], NULL);
}
return 0;
}
的問題是,我不能使用既不MA,MB,也不NC(:=結果)在乘法與代碼中顯示的一樣。 即使我在主要方法中聲明瞭所有這三個元素,我也只是得到錯誤「數組的非特定邊界無效使用」。
我瞭解這裏有什麼不對嗎,或者我該如何解決這個問題?我試圖修改我講座的一個例子,在那裏爲每個元素創建一個線程。 在此先感謝!
如果你曾經分配過它,你如何使用MC進行乘法運算? – 2014-11-21 13:02:29
你是什麼意思?問題是我不能在繁殖中使用它。 – rehne93 2014-11-21 13:03:51