多进程并发
-
实验目的
1. 对理论课中学习的进程,程序等的概念做进一步地理解,明确进程和程序的区别;
2. 加深理解进程并发执行的概念,认识多进程并发执行的实质;
3. 观察进程争夺用资源的现象,分析其过程和原因,学习解决进程互斥的方法。
-
实验原理
多进程并发执行是操作系统中实现高效资源利用和任务调度的一种机制。在多进程系统中,多个进程可以同时处于运行状态,操作系统通过时间分片和上下文切换来实现这种并发执行。
-
实验所用函数
fork():产生一个新的子进程
getpid():取得目前进程的进程识别码
exit():正常终结目前进程的执行
sleep():睡眠time秒
wait():暂停目前进程的执行
-
实验代码
实验一代码:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(){
pid_t pid,pid1;
int i;
pid = fork();
if(pid < 0){
printf("fork failed");
exit(1);
}else if(pid == 0){
printf("child1 pid is %d\n",getpid());
sleep(1);
for(i = 0; i < 26; i++){
printf("%c\n",'A'+i);
}
}else{
pid1=fork();
if(pid1 == 0){
printf("child2 pid is %d\n",getpid());
sleep(1);
for(i = 0; i<26; i++){
printf("%c\n",'a'+i);
}
}else if(pid1 > 0){
printf("parent pid is %d\n",getpid());
sleep(1);
for(i=0; i<26; i++){
printf("%d\n",i);
}
}
}
return 0;
}
扩展实验代码:
-
程序运行结果截图
实验一运行截图:
扩展实验运行截图:
-
实验遇到问题及解决处理方法
在第一次写实验的时候,发现是先输出的父程序和子程序1,请教同学之后发现少了一个sleep函数, sleep():睡眠time秒,可以实现代码之间的交错进行,从而可以交错打印进程的pid
最初编写实验时,发现进程输出不是交错进行的,原因是缺少了sleep函数,导致父子进程的输出没有交错显示。
实验心得:
实验加深了对进程并发执行的理解,特别是进程间如何通过时间分片实现资源共享。
学习了进程创建、终止和等待的系统调用,以及它们在多进程编程中的应用。
通过解决sleep函数的问题,意识到了在多进程编程中同步的重要性。