[英]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.