pthread实现多线程矩阵
时间: 2023-10-07 09:04:19 浏览: 24
下面给出使用pthread实现多线程矩阵乘法的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define MAX_SIZE 1000
int A[MAX_SIZE][MAX_SIZE], B[MAX_SIZE][MAX_SIZE], C[MAX_SIZE][MAX_SIZE];
int N, M, K; // 矩阵 A 的大小为 NxM,矩阵 B 的大小为 MxK
void *thread_func(void *arg) {
int i = (int)arg;
int j, k;
for (j = 0; j < K; j++) {
C[i][j] = 0;
for (k = 0; k < M; k++) {
C[i][j] += A[i][k] * B[k][j];
}
}
pthread_exit(NULL);
}
int main() {
int i, j;
pthread_t threads[MAX_SIZE];
// 输入矩阵 A 和 B
printf("Please enter the size of matrix A (N M): ");
scanf("%d%d", &N, &M);
printf("Please enter the elements of matrix A:\n");
for (i = 0; i < N; i++) {
for (j = 0; j < M; j++) {
scanf("%d", &A[i][j]);
}
}
printf("Please enter the size of matrix B (M K): ");
scanf("%d%d", &M, &K);
printf("Please enter the elements of matrix B:\n");
for (i = 0; i < M; i++) {
for (j = 0; j < K; j++) {
scanf("%d", &B[i][j]);
}
}
// 创建线程计算 C 的每一行
for (i = 0; i < N; i++) {
if (pthread_create(&threads[i], NULL, thread_func, (void*)i) != 0) {
perror("pthread_create");
exit(EXIT_FAILURE);
}
}
// 等待所有线程结束
for (i = 0; i < N; i++) {
if (pthread_join(threads[i], NULL) != 0) {
perror("pthread_join");
exit(EXIT_FAILURE);
}
}
// 输出矩阵 C
printf("The result matrix C is:\n");
for (i = 0; i < N; i++) {
for (j = 0; j < K; j++) {
printf("%d ", C[i][j]);
}
printf("\n");
}
return 0;
}
```
在这个程序中,我们首先输入了矩阵 A 和 B 的大小和元素,然后创建了 N 个线程,每个线程负责计算 C 的一行。每个线程的计算过程与单线程版本的矩阵乘法类似,只不过这里只计算了 C 的一行。最后,我们等待所有线程结束,然后输出矩阵 C 的结果。
需要注意的是,这个程序没有进行任何错误处理。在实际的应用中,我们应该对各种可能的错误进行处理,例如线程创建失败、线程等待失败等等。