使用fork()

时间:2018-05-04 16:35:12

标签: c multiprocessing 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

1 个答案:

答案 0 :(得分:0)

不是最有效的方法,但至少它消除了与孩子沟通的需要:

  • 让所有进程知道所有数字,可能只是让他们知道完整的输入,就像代码已经完成的那样。
  • 让每个进程都知道它是哪个子进程。目前由i
  • 的值完成
  • 让每个进程处理输入中的number-of-processes th 数字。

    假设i == 3有4个进程,这将是输入的第3个,第7个,第11个......数字,i == 1它将是第1个,第5个,第9个......