practice/idiom 在库中随机数生成器的最佳使用

best practice/idiom in random number generator usage in libraries

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

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

如果您没有内存限制,为什么要尝试优化像应用程序外的 prng 实例数这样微不足道的事情?简单的答案:做使您的程序最容易编写、调试和管理的事情。

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