c - 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;
}
哪里有问题?我该如何解决?
任何帮助表示赞赏。
解决方案
您的程序生成的所有进程都创建得非常快,因此调用返回的值time(NULL)
对于所有进程都是相同的。它作为种子传递给伪随机数生成器,使其为每个进程生成相同的伪随机数序列。
为了在每个进程中获得不同的数字,您应该确保每个进程都获得唯一的种子值。实现这一点的最简单方法是将计数器添加i
到时间值:
srand(i + time(NULL));
推荐阅读
- flutter - 安装release apk——flutter应该安装哪个版本?
- javascript - 使用 javascript 将 Hashtag 分隔的值替换为逗号分隔的值
- linux - 递归搜索 *.MKV Bash
- java - spring batch csv:向csv添加多个标题
- docker - Docker 挂载配置容器创建错误
- php - Laravel 6 数据库连接错误。拒绝用户访问
- debian - Openvpn带宽速率限制与tun0
- python - 在 Python Gurobi 中删除变量
- c++ - 文件处理问题,以读取模式打开文件时
- javascript - 如何保护图像 URL 免受角度未经身份验证的访问