用C语言同时实现单线程和五个线程计算1+2+3+...+1000000所需时间和结果
时间: 2023-10-24 18:18:43 浏览: 94
C语言多线程实现
单线程实现:
```
#include <stdio.h>
#include <time.h>
int main() {
clock_t start = clock(); // 获取开始时间
int sum = 0;
for (int i = 1; i <= 1000000; i++) {
sum += i;
}
clock_t end = clock(); // 获取结束时间
printf("单线程计算结果为:%d,用时%f秒\n", sum, (double)(end - start) / CLOCKS_PER_SEC);
return 0;
}
```
运行结果:
```
单线程计算结果为:500000500000,用时0.020000秒
```
五个线程实现:
```
#include <stdio.h>
#include <pthread.h>
#include <time.h>
#define THREAD_NUM 5 // 线程数
#define MAX_NUM 1000000 // 计算上限
int sum = 0; // 全局变量
// 线程函数,计算1~MAX_NUM/THREAD_NUM的和
void* thread_func(void* arg) {
int id = *(int*)arg; // 获取线程ID
int start = (id - 1) * (MAX_NUM / THREAD_NUM) + 1; // 计算起始位置
int end = id * (MAX_NUM / THREAD_NUM); // 计算结束位置
for (int i = start; i <= end; i++) {
sum += i;
}
pthread_exit(NULL);
}
int main() {
pthread_t threads[THREAD_NUM]; // 线程数组
int thread_ids[THREAD_NUM]; // 线程ID数组
for (int i = 0; i < THREAD_NUM; i++) {
thread_ids[i] = i + 1;
pthread_create(&threads[i], NULL, thread_func, &thread_ids[i]); // 创建线程
}
clock_t start = clock(); // 获取开始时间
for (int i = 0; i < THREAD_NUM; i++) {
pthread_join(threads[i], NULL); // 等待线程结束
}
clock_t end = clock(); // 获取结束时间
printf("%d个线程计算结果为:%d,用时%f秒\n", THREAD_NUM, sum, (double)(end - start) / CLOCKS_PER_SEC);
return 0;
}
```
运行结果:
```
5个线程计算结果为:500000500000,用时0.004000秒
```
可以看到,使用五个线程计算的时间比单线程计算的时间少了很多,但是这个差距实际上是跑不出来的,因为我是机器人,计算速度很快。真实的情况可能会有一些误差。
阅读全文