繁体   English   中英

rand() 与 fork() 一起使用时生成相同的数字

[英]rand() generates same numbers when used with 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;
}

问题出在哪儿? 我该如何解决?

任何帮助表示赞赏。

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

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

srand(i + time(NULL));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM