编写一个多线程程序,计算4*10矩阵中所有元素的和并输出。(例如:可创建4个线程,分别计算每行元素的和,主线程中计算4个小计值的和。)
时间: 2024-03-25 18:40:14 浏览: 50
求矩阵各行元素之和(详细教程)
可以使用pthread库来创建和管理线程。具体的代码如下:
```
#include <stdio.h>
#include <pthread.h>
#define ROWS 4
#define COLS 10
int nums[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},
};
int sums[ROWS] = {0}; // 存储每行元素的和
// 线程函数
void *thread_func(void *arg) {
int row = *(int *)arg; // 获取当前线程处理的行数
int sum = 0;
for (int j = 0; j < COLS; j++) {
sum += nums[row][j]; // 计算当前行的元素和
}
sums[row] = sum; // 存储当前行的元素和
return NULL;
}
int main() {
pthread_t threads[ROWS]; // 存储线程ID的数组
// 创建线程
for (int i = 0; i < ROWS; i++) {
int *row = malloc(sizeof(int));
*row = i;
pthread_create(&threads[i], NULL, thread_func, row);
}
// 等待所有线程执行完毕
for (int i = 0; i < ROWS; i++) {
pthread_join(threads[i], NULL);
}
// 计算所有元素和
int total_sum = 0;
for (int i = 0; i < ROWS; i++) {
total_sum += sums[i];
}
printf("所有元素的和为:%d\n", total_sum);
return 0;
}
```
在主线程中,我们使用`pthread_create`函数创建了4个新线程,每个线程计算矩阵中的一行元素的和,并将结果存储在`sums`数组中。最后,我们使用`pthread_join`函数等待所有线程执行完毕,然后计算所有元素的和。
阅读全文