用fork实现多线程从1加到100
时间: 2024-05-04 11:19:27 浏览: 77
Fork()函数与Linux中的多线程编程
在 C 语言中,使用 fork() 函数可以创建一个新的子进程,并在子进程中运行一些指定的代码。我们可以利用这个特性来实现一个多进程计算从 1 加到 100 的程序。
下面是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#define MAX_NUM 100
int sum = 0; // 全局变量,用于统计加和结果
void calc(int start, int end) {
int i;
for (i = start; i <= end; i++) {
sum += i;
}
}
int main(void) {
int i, pid, status, step = MAX_NUM / 2; // step 表示每个子进程计算的区间大小
for (i = 0; i < 2; i++) {
pid = fork(); // 创建新的子进程
if (pid == -1) { // 创建失败
printf("Failed to create child process.\n");
exit(1);
} else if (pid == 0) { // 子进程
int start = i * step + 1;
int end = (i + 1) * step;
calc(start, end);
exit(0); // 子进程结束
}
}
// 等待子进程结束
for (i = 0; i < 2; i++) {
wait(&status);
}
printf("The sum of 1 to %d is %d\n", MAX_NUM, sum);
return 0;
}
```
上述代码中,我们首先定义了一个全局变量 `sum`,用于存储加和的结果。然后使用一个循环来创建两个子进程,每个子进程计算从 `start` 到 `end` 的区间的和。父进程等待两个子进程结束后,输出最终的加和结果。
需要注意的是,子进程需要调用 `exit()` 函数来结束自己的运行,否则它会继续执行父进程的代码。另外,在使用 `fork()` 函数时,需要进行错误处理。如果返回值为 -1,则表示创建子进程失败,此时应该退出程序。
阅读全文