C:多个child进程各自产生不同的随机数

C: multiple child process each generate different random number

我试图让 children 每次都处理不同的随机值。如果有 3 children,我希望他们每个生成 3 个不同的随机值,所以总共 3*3=9 个不同的数字。我已经尝试了很多srand(),如果我去srand(time(NULL)),所有children都会产生三个相同的随机数(123, 123, 123),如果我把getpid()放入srand(),每次child三次产生一个随机数(111,222,333)。但我找不到能产生 9 种不同随机值的东西。这是我的代码。

int main(int argc, char const *argv[]){
  int pid[6];
    for (int i = 0; i < 3; i++) {
        pid[i] = fork();
        if (pid < 0) {
            printf("Fork Failed\n");
            exit(0);
        }
        if (pid[i] == 0) {
            time_t t;
            srand((int)time(&t) % getpid());
            int r = rand() % 30;
            int count = 0;
            while (count < 3){
                printf("Child %d: %d\n",i+1,r);
                count++;
            }
            exit(0);
        }
  }
  return 0;
}

你只在每个 child 中调用 rand() 一次(在 while (count < 3) 循环之外,然后你在一个循环中打印出相同的数字三次。注意你没有在循环迭代之间为 r 分配任何新值,因此当您再次打印时它的值自然不会改变。

如果您想要三个不同的号码,请调用 rand() 三次(在循环内)。替换

        int r = rand() % 30;
        int count = 0;
        while (count < 3){
            printf("Child %d: %d\n",i+1,r);
            count++;
        }

        int count = 0;
        while (count < 3){
            int r = rand() % 30;
            printf("Child %d: %d\n",i+1,r);
            count++;
        }