linux 多线程求和
时间: 2023-10-13 15:22:05 浏览: 39
以下是一个使用多线程的 Linux C++ 代码,用于计算给定数组中所有元素的总和:
```
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define NUM_THREADS 4 // 线程数
#define ARRAY_SIZE 100 // 数组大小
int array[ARRAY_SIZE]; // 给定数组
int sum = 0; // 总和
// 线程执行的函数
void *calculate_sum(void *thread_id)
{
int tid = *(int*)thread_id;
int start = tid * (ARRAY_SIZE / NUM_THREADS); // 计算每个线程的起始位置
int end = (tid + 1) * (ARRAY_SIZE / NUM_THREADS); // 计算每个线程的结束位置
for (int i = start; i < end; i++)
{
sum += array[i]; // 计算本线程负责的部分的总和
}
pthread_exit(NULL);
}
int main()
{
pthread_t threads[NUM_THREADS];
int thread_ids[NUM_THREADS];
// 初始化数组
for (int i = 0; i < ARRAY_SIZE; i++)
{
array[i] = i;
}
// 创建线程
for (int i = 0; i < NUM_THREADS; i++)
{
thread_ids[i] = i;
pthread_create(&threads[i], NULL, calculate_sum, (void *)&thread_ids[i]);
}
// 等待线程完成
for (int i = 0; i < NUM_THREADS; i++)
{
pthread_join(threads[i], NULL);
}
printf("Sum of array elements is %d\n", sum);
return 0;
}
```
该代码首先初始化一个大小为 100 的数组,然后创建 4 个线程,每个线程负责计算数组的一部分元素的总和。每个线程计算完毕后,主线程等待所有线程完成并打印出最终的总和。
该代码的输出应该为:
```
Sum of array elements is 4950
```
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)