c语言编写一个多线程的程序,计算n个(n>108)不同整数的和。
时间: 2024-02-06 09:11:42 浏览: 78
linux多线程
好的,下面是一个使用多线程计算n个不同整数和的C语言程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define N 1000000000 // 定义n的值
int num_threads; // 线程数
int *nums; // 存储n个不同整数
long long sum = 0; // 存储总和
void *sum_thread(void *arg) {
int tid = *(int *)arg; // 获取线程ID
long long thread_sum = 0;
int i;
for (i = tid; i < N; i += num_threads) {
thread_sum += nums[i];
}
sum += thread_sum;
return NULL;
}
int main(int argc, char *argv[]) {
if (argc != 2) {
printf("Usage: %s <num_threads>\n", argv[0]);
return 1;
}
num_threads = atoi(argv[1]); // 获取线程数
// 初始化n个不同整数
nums = (int *)malloc(N * sizeof(int));
int i;
for (i = 0; i < N; i++) {
nums[i] = i + 1;
}
// 创建线程
pthread_t *threads = (pthread_t *)malloc(num_threads * sizeof(pthread_t));
int *thread_ids = (int *)malloc(num_threads * sizeof(int));
for (i = 0; i < num_threads; i++) {
thread_ids[i] = i;
pthread_create(&threads[i], NULL, sum_thread, &thread_ids[i]);
}
// 等待线程完成
for (i = 0; i < num_threads; i++) {
pthread_join(threads[i], NULL);
}
printf("Sum = %lld\n", sum);
return 0;
}
```
在这个程序中,我们使用了线程来并行计算n个不同整数的和。我们首先定义了常量N来表示整数的数量,并定义了全局变量num_threads来表示要使用的线程数。然后我们初始化了n个不同整数并存储在nums数组中。
接下来,我们定义了一个sum_thread函数来计算每个线程的和。这个函数首先获取线程ID,然后使用循环迭代数组nums,并将对应的整数加到thread_sum变量中。最后,它将thread_sum加到全局变量sum中,并返回NULL。
在主函数中,我们首先检查命令行参数是否正确,并获取要使用的线程数。然后,我们创建了num_threads个线程,并为每个线程分配一个唯一的ID。我们使用pthread_create函数来创建每个线程,并将其分配给sum_thread函数。最后,我们使用pthread_join函数等待所有线程完成,并打印总和sum的值。
请注意,由于n的值非常大,所以我们使用了long long类型来存储总和。此外,我们使用了动态分配内存来存储nums数组和线程ID数组,以便可以使用任意数量的线程。
阅读全文