编写一个多线程c程序,计算4*10矩阵中所有元素的和并输出。(例如:可创建4个线程,分别计算每行元素的和,主线程中计算4个小计值的和。)
时间: 2024-02-27 20:53:17 浏览: 67
好的,下面是代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define ROWS 4
#define COLS 10
int matrix[ROWS][COLS] = {
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
{11, 12, 13, 14, 15, 16, 17, 18, 19, 20},
{21, 22, 23, 24, 25, 26, 27, 28, 29, 30},
{31, 32, 33, 34, 35, 36, 37, 38, 39, 40}
};
typedef struct {
int row;
int sum;
} thread_data;
void *calculate_row_sum(void *arg) {
thread_data *data = (thread_data *)arg;
int sum = 0;
int i;
for (i = 0; i < COLS; i++) {
sum += matrix[data->row][i];
}
data->sum = sum;
pthread_exit(NULL);
}
int main() {
pthread_t threads[ROWS];
thread_data data[ROWS];
int total_sum = 0;
int i;
for (i = 0; i < ROWS; i++) {
data[i].row = i;
if (pthread_create(&threads[i], NULL, calculate_row_sum, &data[i]) != 0) {
fprintf(stderr, "Error creating thread\n");
return -1;
}
}
for (i = 0; i < ROWS; i++) {
if (pthread_join(threads[i], NULL) != 0) {
fprintf(stderr, "Error joining thread\n");
return -1;
}
total_sum += data[i].sum;
}
printf("Total sum: %d\n", total_sum);
return 0;
}
```
这个程序创建了4个新线程,每个线程负责计算矩阵中一行元素的和。在主线程中,我们使用 `pthread_create()` 函数创建新线程,并将每个线程需要计算的行号传递给线程函数。在线程函数中,我们计算该行元素的和,并将结果保存在一个结构体中。在主线程中,我们使用 `pthread_join()` 函数等待所有线程结束,并将每个线程计算的和累加到总和中。最后,我们输出总和。
阅读全文