Предположим, я пишу библиотеку, которая использует функции prng C ++ 11. Должна ли каждая функция / объект / файл в библиотеке инициализировать свой собственный генератор случайных чисел? Я собирался пойти с инициализацией одного статического std :: mt19937 в пространстве имен и использовать только этот после этого, но код был бы менее модульным. Это рекомендуется?
Это не потокобезопасно, поэтому, если вы собираетесь создавать несколько потоков, создайте больше экземпляров MT19937 prng. В противном случае, это полностью зависит от вас. Любой ответ здесь за пределами этого будет главным образом основан на мнении.
Если вы не ограничены в памяти, зачем пытаться оптимизировать что-то настолько тривиальное, как количество экземпляров вашего prng вне приложения? Простой ответ: делайте то, что делает вашу программу проще в написании, отладке и управлении.
Возможное решение — хранить ссылку на MT19937 в каждом объекте и контролировать доступ к нему через конструкцию блокировки, чтобы сделать его поточно-ориентированным.