有人可以帮助我如何创建多个具有相同父级的子进程,以便完成特定工作的“某些”部分吗?
例如,应用子进程的外部排序算法; 每个子进程对一部分数据进行排序,最后父进程合并它们。
编辑:也许我应该提到使用循环分叉多个子进程..
以下是如何分叉10个孩子并等待他们完成:
pid_t pids[10]; int i; int n = 10; /* Start children. */ for (i = 0; i < n; ++i) { if ((pids[i] = fork()) < 0) { perror("fork"); abort(); } else if (pids[i] == 0) { DoWorkInChild(); exit(0); } } /* Wait for children to exit. */ int status; pid_t pid; while (n > 0) { pid = wait(&status); printf("Child with PID %ld exited with status 0x%x.n", (long)pid, status); --n; // TODO(pts): Remove pid from the pids array. }
我认为值得指出为什么线程在这里更合适:
当你试图并行完成工作的“部分”时,我假设你的程序需要知道计算的结果。 fork()之后,fork()的进程不会比fork()之后的初始信息多。 一个进程中的每个更改都是另一个进程未知的,您需要将信息作为消息传递(例如,通过管道,请参阅“man pipe”)。 进程中的线程共享相同的地址空间,因此能够操纵数据并使其与其他“即时”可见。 还增加了更轻量级的好处,我会选择pthreads()。
毕竟:如果你使用pthreads,你将学习所有关于fork()的知识。
你可以用fork做到这一点。 给定的父级可以根据需要进行分叉。 但是,我同意AviD pthreads可能更合适。
pid_t firstChild, secondChild; firstChild = fork(); if(firstChild > 0) { // In parent secondChild = fork(); if(secondChild > 0) { // In parent } else if(secondChild < 0) { // Error } else { // In secondChild } } else if(firstChild < 0 ) { // Error } else { // In firstChild }
如果要启动多个分支,则应该递归执行。 这是因为您必须从父进程调用fork。 否则,如果启动第二个分支,则将复制父代和第一个子进程。 这是一个例子:
需要了解更多c/c++开发分享多个子进程,也可以关注C/ C++技术分享栏目---计算机技术网(www.ctvol.com)!
void forker(int nprocesses) { pid_t pid; if(nprocesses > 0) { if ((pid = fork()) < 0) { perror("fork"); } else if (pid == 0) { //Child stuff here printf("Child %d endn", nprocesses); } else if(pid > 0) { //parent forker(nprocesses - 1); } } }
以上就是c/c++开发分享多个子进程相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/936070.html