定义&全局范围的种子伪随机数发生器(C ++)

时间:2015-02-25 19:53:42

标签: c++ random

将某个RNG的实例(如std::mt19937)声明并播种为全局变量是危险/不良形式吗?这样,任何使用随机数的函数调用对于给定的种子基本上是同步的。也就是说,对于给定的种子,我的整个程序将以相同的方式运行。除了潜在的错误,这是否也会牺牲任何随机性?

更好的替代方法是在main()中声明它然后只是将引用传递给它以便在函数中进行任何后续使用吗?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

全球RNG不会牺牲任何随机性,但它就像使用任何其他全局变量一样:

  • 简化了初始实施。
  • 它可以使未来的发展更难。 (例如,出于单元测试目的,您可能希望指定具有可重复序列的特定RNG实例。)
  • 介绍了线程安全问题。 (同时访问全局RNG的两个线程将成为竞争条件。)

传统观点认为全局和单身人士引发的问题多于他们解决的问题,但你必须自己决定如何平衡你的计划。