定义和播种具有全局范围的伪随机数生成器(C++)
Defining & seeding pseudo-random number generator with global scope (C++)
将某个RNG(如std::mt19937
)的实例声明为全局变量并进行种子设定是否危险/错误?这样,任何使用随机数的函数调用本质上都是对给定种子进行同步的。也就是说,对于给定的种子,我的整个程序将以相同的方式运行。撇开潜在的bug不谈,这是否也牺牲了任何随机性?
在main()中声明它,然后将引用传递给它以供后续在函数中使用,这是更好的选择吗?
提前感谢您的帮助!
全局RNG不会牺牲任何随机性,但它就像使用任何其他全局变量一样:
- 它简化了最初的实施
- 它会使未来的发展更加困难。(例如,出于单元测试的目的,您可能希望指定具有可重复序列的特定RNG实例。)
- 它引入了线程安全问题。(两个线程同时访问全局RNG将成为竞争条件。)
传统观点是,全局和单体导致的问题比解决的问题多,但你必须自己决定如何平衡你的程序。
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 制作具有平均值的随机数生成器
- C++ 随机数生成器:尝试将结果作为向量获取,但通过制作 void 函数来执行此操作而出现错误
- 尝试在 c++ 中创建随机数生成器并收到错误
- 存储并重新加载随机数生成器状态
- 作为随机数生成器的争用条件
- 播种随机数生成器以使用分叉的好方法是什么?
- 随机数生成器的性能因平台而异
- 随机数生成器的种子和状态有什么区别?
- RcppShark 随机森林示例引发有关随机数生成器的异常
- C++多个实例的随机数生成器组种子中增强
- C++随机数生成器仅生成 0 - C++ 11
- GSL+OMP:C++中的线程安全随机数生成器
- 贪吃蛇游戏 - 食物瓷砖的随机数生成器
- 随机数生成器在 C++ 用于 skipList.
- RSA 加密和解密期间的随机数生成器要求
- 如何使用 cpp 设置随机数生成器的语法?
- 产生相同结果的随机数生成器
- C++随机数生成器通常在 Visual Studio 中运行程序时在 2 次后停止生成数字
- 如何理解C++11随机数生成器