Вопрос

Ищете потоковую безопасную случайную генератор, я нашел класс генератора Mersenne Twister, который автор говорит, если резьба безопасен:

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

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

Это реализация действительно безопасна в потоке? Если да, то, что такое волшебство?

Это было полезно?

Решение

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top