繁体   English   中英

使用fork()创建具有指定数量的子代的多进程

[英]Create multi-process with specified number of childs using fork()

我想制作一个具有多个输入数字的程序,每个数字(用空格分隔)必须经过4个不同的处理过程才能看清它是否是质数。 在这种情况下,必须添加一个计数器(因此孩子必须具有我在考虑的共享内存)。

一旦我的过程用一个数字完成,它将得到另一个未被其他过程处理的数字。 他们的想法是让他们几乎同时工作。

我想做的是将字符串分隔为令牌,并将其发送给子进程。

到目前为止,这是我所做的:

unsigned int i = 0;
int processes = 4;
char *s=malloc(sizeof(char)*100);

fgets (s, 100, stdin);

for (i = 0; i < processes; ++i) {
    if (fork() == 0) {
        printf("Process %d:", i);
        make_token(s);
        treat_number(token);
        exit(0);
    }
}
// wait all child processes
int status;
for (i = 0; i < processes; ++i)
wait(&status);

return 0;

但是,随着程序4的完成,我的程序结束了,它们不能完全并行工作。

那么,如何使它几乎同时在4个进程中处理多个数字,而每个数字都得到一个不同的数字,直到我的字符串结束?

输入/输出的一个例子是:

Input: 0 10 100000000 100007701 100015739 3 5
Output: 4

这不是最有效的方法,但是您至少可以消除与孩子沟通的需要:

  • 使所有进程都知道所有数字,也许只需让它们知道完整的输入即可,就像代码已经做到的那样。
  • 让每个进程知道它是哪个孩子。 目前由i的值完成。
  • 让每个进程照顾的number-of-processes 数从输入。

    假设有4个进程,那么对于i == 3这将是输入中的第3、7、11 ...个数字;对于i == 1 ,它将是第1、5、9,...。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM