我想制作一个有多个数字作为输入的程序,每个数字(用空格分隔)必须在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
答案 0 :(得分:0)
不是最有效的方法,但至少它消除了与孩子沟通的需要:
i
。让每个进程处理输入中的number-of-processes
th 数字。
假设i == 3
有4个进程,这将是输入的第3个,第7个,第11个......数字,i == 1
它将是第1个,第5个,第9个......