并行执行任务:两种 fork 多子进程方法对比

4星 · 超过85%的资源 需积分: 8 4 下载量 198 浏览量 更新于2024-09-12 1 收藏 51KB DOCX 举报
本文档主要探讨了在C语言环境下利用`fork()`系统调用创建多个子进程的方法。`fork()`函数是Unix/Linux系统中的一个关键进程管理工具,它用于创建一个与当前进程几乎完全相同的子进程,这两个进程共享相同的父进程ID(PID)和全局变量副本。以下是两种不同的方法来实现这一功能: 方法一:同时创建多个子进程(可读性强,易于扩展) 在这个示例中,`main()`函数首先打印"beforefork(),pid=",然后连续调用两次`fork()`。第一次创建的子进程`p1`如果为0,表示它是一个新创建的子进程,会打印"incild1,pid="并立即返回0,防止执行后面的`pid_tp2=fork()`。第二次`fork()`在`p1`不为0时执行,即在父进程下,创建了`p2`。每个子进程结束后,父进程分别等待它们的退出状态,并打印出子进程的PID和退出状态。 方法二:创建两个子进程(结构复杂,可读性差) 另一种方法采用更紧凑的结构,先创建第一个子进程`p1`,然后在父进程中再根据`p1`的返回值决定是否创建第二个子进程`p2`。这种情况下,当`p1`和`p2`都完成时,父进程会同时等待它们。这种方法虽然代码量较少,但可读性较差,扩展到更多子进程时可能会变得难以维护。 这两种方法都展示了`fork()`的基本用法,以及如何通过不同策略控制子进程的数量和执行顺序。理解这些技巧有助于开发者在实际项目中根据需求灵活地管理进程,提高程序的效率和可维护性。同时,需要注意的是,频繁使用`fork()`可能导致资源问题,比如过多的子进程会消耗大量内存,因此在实际应用中需谨慎使用。
2016 浏览量
一、建立以下五个表: 教师表:Teacher,学生表:Student, 课程表:Course,选课表:SC,授课表:TC 二、完成以下查询: 1.查询成绩在80-90之间的记录。 2.查询至少4个同学选修的课程名。 3.查询其他系中比“信息系”所有学生年龄都大的学生名单及年龄,并按年龄降序输出: 4.查询与学生张建国同岁的所有学生的学号。姓名和系别。 5.查询选修了2门以上课程的学生名单。 6.查询至少有一门与“张建国”选课相同的学生的姓名,课程号,系别 7.查询成绩比该课程平均成绩高的学生的成绩表。 8.查询选课号为01001课程且成绩高于课程01002学生的姓名,此两门课的课程名和成绩。 9.查询所有没选修01001号课程的学生名单 10、查询每个同学各门课程的平均成绩和最高成绩,按降序输出姓名、平均成绩、最高成绩; 11、查询所有学生都选修了的课程号和课程名; 12、查询选修了991102号学生选修了的课程的学生学号和姓名。 三、使用SQL创建视图,修改记录 1.创建成绩视图SCORE_VIEW,包含学号sno,姓名sn,课程名cn,成绩score; 2.创建一个计算机系学生名单视图S_VIEW,包含学号sno,姓名sn,性别sex; 3.通过上面的视图,修改学号为991102,课程号01001的成绩记录; 4,创建一个视图,计算机系学生的成绩单score_view_CDEPT,包含学号sno,姓名sn,课程名cn,成绩score