Нитобезопасный твистер mersenne

В поисках поточно-безопасного генератора случайных чисел я нашел класс генератора мерсенна-твистера, который, по словам автора, является поточно-ориентированным:

http://www.umiacs.umd.edu/~yangcj/mtrnd.html

Но после изучения кода я не вижу, безопасен ли это поток. Здесь нет никаких блокировок или чего-либо похожего на переменную блокировки.

Действительно ли эта реализация потокобезопасна? Если да, то в чем магия?


person Horacio    schedule 01.07.2010    source источник


Ответы (2)


Он выглядит поточно-ориентированным в том смысле, что два разных объекта MersenneTwist могут использоваться одновременно. Вы не можете использовать один и тот же объект в двух потоках, не защищая его блокировкой.

Я предполагаю, что в исходной версии C автор говорит об используемых глобальных или статических переменных, так что это улучшение.

person Amnon    schedule 01.07.2010
comment
Мое приложение требует создания случайных, но уникальных чисел среди всех потоков. Могу ли я гарантировать уникальность сгенерированных чисел, используя другой объект Mersenne Twist для каждого потока? - person Horacio; 01.07.2010
comment
Другой вопрос - создание уникальных номеров. Кроме того, вы получите ту же последовательность, если не дадите каждому объекту отдельное семя. - person Amnon; 01.07.2010
comment
Пока я использую один и тот же объект mersenne, я буду получать уникальные случайные числа, пока последовательность не будет повторяться, верно? А для mersenne twister цикл повторяется через долгий период, намного превышающий то, что может потребоваться моему приложению, поэтому я думаю, что могу использовать этот случайный генератор также как генератор уникальных идентификаторов. Поправьте меня, если не так, пожалуйста. - person Horacio; 01.07.2010
comment
Я не очень разбираюсь в этой теме, но уверен, что это неправильный подход для генератора уникальных идентификаторов. Как я уже сказал, это другой вопрос. - person Amnon; 01.07.2010
comment
Совершенно очевидно, что это неправильно. Поскольку период действия Mersenne Twister намного больше, чем его диапазон, он должен повториться намного раньше. Не только для этого ГПСЧ или даже для ГПСЧ в целом. AL1 RNG должны генерировать неуникальный результат, если они дают больше результатов, чем размер их выходного диапазона. (Принцип голубятни) - person MSalters; 08.10.2010

Обсуждается, как создать многопотоковый генератор случайных чисел Mersenne Twister в Multiple stream Mersenne Twister, а также реализация (т.е. исходный код в Fortran 95) на http://theo.phys.sci.hiroshima-u.ac.jp/~ishikawa/PRNG/mt_stream_en.html. Метод запускает несколько потоков в точках последовательности Mersenne Twister, которые сильно разделены, что гарантирует, что несколько потоков независимы друг от друга и не будут создавать одну и ту же последовательность случайных чисел. Нет необходимости в блокировках и, следовательно, в потенциальных узких местах в параллельном коде; доступ к отдельным потокам осуществляется по идентификатору.

person M. S. B.    schedule 08.10.2010