C语言 使用 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,它将是 1st、5th、9th、...

相关内容

  • 没有找到相关文章

最新更新