c涉及管道的并行过程
我试图创建与给定给可执行文件的参数数量相同的进程,并让每个进程将参数传递给父进程,存储到数组中,最后打印出数组的元素。由于进程是并行运行的,当我打印出数组元素时,相对于我输入这些元素的顺序,顺序应该是随机的,但情况似乎并非如此,因为我已经运行了可执行文件100万次,有人能告诉我问题出在哪里吗?所以有人善意地指出,read序列化了一些东西,我应该怎么做才能使这些过程真正并行呢?您在父级中读取的管道会序列化一些东西 您1创建子对象;2.儿童向管道中书写;3父级将阻止读取,直到有要读取的内容。这对所有的孩子都是重复的c涉及管道的并行过程,c,C,我试图创建与给定给可执行文件的参数数量相同的进程,并让每个进程将参数传递给父进程,存储到数组中,最后打印出数组的元素。由于进程是并行运行的,当我打印出数组元素时,相对于我输入这些元素的顺序,顺序应该是随机的,但情况似乎并非如此,因为我已经运行了可执行文件100万次,有人能告诉我问题出在哪里吗?所以有人善意地指出,read序列化了一些东西,我应该怎么做才能使这些过程真正并行呢?您在父级中读取的管道会序列化一些东西 您1创建子对象;2.儿童向管道中书写;3父级将阻止读取,直到有要读取的内容。这对所有
#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;
}