首页 > 解决方案 > rand() 与 fork() 一起使用时生成相同的数字

问题描述

我正在尝试生成特定范围内的随机数。我还在我的程序中使用子进程。

但是,该rand()函数在 for 循环中生成相同的数字,例如 550,即使我使用它随机化了它srand()

这是演示的代码:

int main()
{

int count = 5;
int i;
  for (i = 0; i < count; i++)
  {
    pid_t pid = fork();
    if (pid == 0)
    {

      // random number between 500 and 700
      srand(time(NULL));
      int random = rand() % 100 + 500;
      printf("%d\n", random);

      exit(0);
    }
    else
    {

      wait(NULL);
    }
  }

  return 0;
}

哪里有问题?我该如何解决?

任何帮助表示赞赏。

标签: c

解决方案


您的程序生成的所有进程都创建得非常快,因此调用返回的值time(NULL)对于所有进程都是相同的。它作为种子传递给伪随机数生成器,使其为每个进程生成相同的伪随机数序列。

为了在每个进程中获得不同的数字,您应该确保每个进程都获得唯一的种子值。实现这一点的最简单方法是将计数器添加i到时间值:

srand(i + time(NULL));

推荐阅读