#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
int i;
int fd[2];
int values[argc - 1];
for( i = 1; i < argc; i++ ) {
pipe(fd);
switch( fork()) {
case 0: /* child */
/* Do stuff */
close(fd[0]);
int value = atoi(argv[i]);
write(fd[1], &value, sizeof(value));
exit( 0 );
case -1:
perror( "fork" );
exit(1);
default: /* parent */
close(fd[1]);
read(fd[0], &values[i - 1], sizeof(values[i - 1]));
/* do stuff, but don't wait() or terminate */
}
}
for (i = 0; i < (argc - 1); i++)
{
printf("%d\n", values[i]);
}
return 0;
}
我试图创建与给定可执行文件的参数数量一样多的进程,并让每个进程将参数传递给父级并存储到数组中,最后打印出数组的元素。由于进程是并行运行的,当我打印出数组元素时,顺序应该是随机输入这些元素的顺序,但这似乎并非如此,因为我已经运行了可执行文件100万次,可以有人告诉我这是什么问题?所以有人慷慨地指出,读取序列化的东西,我该怎么做才能使这些过程真正并行?
答案 0 :(得分:0)
父管道read
序列化了一些东西。
你(1)创造孩子; (2)孩子写管道; (3)父母将在read
上阻止,直到有东西要读。这对所有孩子都重复。