操作系统用c语言创造三个线程,实现,每个线程计算求和,之后主线程打印结果,一号线程算1到100,二号线程算101到200,三号线程算201到300,分别打印求和
时间: 2024-10-20 09:05:19 浏览: 24
multisum_nowmnh_C语言_多进程_多线程linux_
在C语言中,为了创建多线程并分别计算指定范围内的和,我们可以利用POSIX线程库(pthread)。以下是一个简单的示例,展示了如何创建三个线程,每个线程处理一个单独的范围,并在主线程中汇总和打印结果:
```c
#include <stdio.h>
#include <pthread.h>
#define THREAD_NUM 3
#define RANGE_START(i) (i * 100 + 1)
#define RANGE_END(i) ((i+1) * 100)
// 计算子函数,接收范围的开始和结束值
void* calculate_sum(void* arg) {
long start = *(long*)arg;
long end = start + 99;
long sum = 0;
for(long i=start; i<=end; ++i) {
sum += i;
}
printf("线程 %d 的求和结果: %ld\n", pthread_self(), sum);
return NULL;
}
int main() {
pthread_t threads[THREAD_NUM]; // 线程数组
long ranges[THREAD_NUM] = {1, 2, 3}; // 存储每个线程的起始范围
// 创建线程
for(int i=0; i<THREAD_NUM; ++i) {
void* (*thread_func)(void*) = calculate_sum;
long thread_arg = ranges[i];
if (pthread_create(&threads[i], NULL, thread_func, &thread_arg)) {
perror("创建线程失败");
exit(1);
}
}
// 等待所有线程完成
for(int i=0; i<THREAD_NUM; ++i) {
if (pthread_join(threads[i], NULL)) {
perror("等待线程完成失败");
exit(1);
}
}
// 打印主线程的结果
long total_sum = 0;
for(int i=0; i<THREAD_NUM; ++i) {
total_sum += ranges[i] * (ranges[i]+1)/2; // 根据等差数列求和公式
}
printf("主线程计算的总和结果: %ld\n", total_sum);
return 0;
}
```
在这个例子中,我们首先定义了计算函数`calculate_sum`,然后在主函数里创建线程并将它们绑定到各自的计算范围。主线程在所有子线程结束后,通过简单的数学公式计算出整体的和。
阅读全文