【发布时间】:2014-11-21 12:37:19
【问题描述】:
我一般是线程编程和 C 的初学者,我正在尝试弄清楚如何使用 Pthreads 进行简单的矩阵乘法。我想为每一列创建一个线程并将结果放入结果矩阵中。我正在尝试动态地执行此操作,这意味着允许用户使用输入作为大小来创建两个 n x n 矩阵。
我现在的代码,不包括填充矩阵和读取大小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(:= 结果),就像代码中显示的那样。 即使我在 main 方法中声明了所有这三个,我也只是收到错误“无效使用具有不确定边界的数组”。
我在这里理解有什么问题吗?或者我该如何解决?我试图改编我的讲座示例,其中将为每个元素创建一个线程。 提前致谢!
【问题讨论】:
-
如果你曾经分配过 MC,你如何在乘法中使用它?
-
你到底是什么意思?问题是我不能多次使用它。