库中随机数生成器使用的最佳实践/习语



假设我正在编写一个使用 C++11 的 prng 功能的库。库中的每个函数/对象/文件是否应该初始化自己的随机数生成器?我打算在命名空间中初始化一个静态 std::mt19937,然后只使用那个,但代码的模块化程度会降低。这是推荐的吗?

它不是线程安全的,所以如果你要生成多个线程,请创建更多MT19937 prng的实例。 否则,这完全取决于你。 除此之外的任何答案都将主要是基于意见的。

如果您不受内存限制,为什么要尝试优化一些微不足道的东西,例如应用程序中的 prng 实例数? 简单的答案:做使程序最易于编写、调试和管理的操作。

一种可能的解决方案是在每个对象中保存对MT19937的引用,并通过锁定构造控制对它的访问,以使其线程安全。

最新更新