c涉及管道的并行过程

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

我试图创建与给定给可执行文件的参数数量相同的进程,并让每个进程将参数传递给父进程,存储到数组中,最后打印出数组的元素。由于进程是并行运行的,当我打印出数组元素时,相对于我输入这些元素的顺序,顺序应该是随机的,但情况似乎并非如此,因为我已经运行了可执行文件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;
}