c语言编写一个多线程程序,计算n个(n>108)不同整数的和
时间: 2024-02-04 15:03:05 浏览: 62
linux多线程
以下是一个使用多线程计算n个不同整数之和的C语言程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define NUM_THREADS 4 // 定义线程数量
#define N 100000000 // 定义整数数量
int *arr; // 整数数组
long long sum = 0; // 整数和
pthread_mutex_t mutex; // 互斥锁
void *sum_func(void *tid) {
long thread_id = (long)tid;
long long local_sum = 0;
long start = thread_id * N / NUM_THREADS;
long end = (thread_id + 1) * N / NUM_THREADS;
for (long i = start; i < end; i++) {
local_sum += arr[i];
}
pthread_mutex_lock(&mutex);
sum += local_sum;
pthread_mutex_unlock(&mutex);
pthread_exit(NULL);
}
int main() {
pthread_t threads[NUM_THREADS];
pthread_mutex_init(&mutex, NULL);
// 初始化整数数组
arr = (int *)malloc(N * sizeof(int));
for (long i = 0; i < N; i++) {
arr[i] = i;
}
// 创建线程
for (long t = 0; t < NUM_THREADS; t++) {
pthread_create(&threads[t], NULL, sum_func, (void *)t);
}
// 等待线程结束
for (long t = 0; t < NUM_THREADS; t++) {
pthread_join(threads[t], NULL);
}
printf("The sum of %ld integers is %lld\n", N, sum);
pthread_mutex_destroy(&mutex);
free(arr);
return 0;
}
```
该程序使用了4个线程计算100000000个整数之和。首先,主线程创建一个整数数组,并将其初始化为连续的整数。然后,主线程创建4个线程,并为每个线程分配一段整数数组进行计算。当每个线程计算完成后,它们将计算结果加到一个互斥锁保护的全局变量中。最后,主线程等待所有线程结束,并输出整数和。
阅读全文