我想制作一个将多个数字作为输入的程序,并且每个数字(用空格分隔(必须在 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
,它将是 1st、5th、9th、...