PRNG должен быть потокобезопасным? - PullRequest
4 голосов
/ 05 марта 2009

До тех пор, пока одновременные вызовы не вызывают seg-v и не возвращают одно и то же значение, какие причины существуют для предотвращения состояния гонки и повреждения данных в PRNG , когда первичные эффекты этой ошибки являются непредсказуемыми и что это точка PRNG?


Редактировать: есть ли PRNG, который не пострадает в условиях гонки и повреждения данных?

Ответы [ 3 ]

5 голосов
/ 06 марта 2009

когда первичные эффекты этой ошибки - непредсказуемые результаты, и в этом смысл PRNG?

«Случайный» - это не то же самое, что непредсказуемый. Случайный - это определенное распределение, которое очень важно поддерживать, если вам нужны реальные случайные числа. Если ваши случайные числа предсказуемы каким-либо образом, это может быть проблемой безопасности или, по крайней мере, программной ошибкой

3 голосов
/ 06 марта 2009

PRNG - это тщательно разработанные инструменты - честно говоря, если бы условия гонки и ошибки потоков были хорошим PRNG, реализация была бы написана таким образом.

Проблема с добавлением потоковых ошибок для увеличения случайности заключается в том, что это неизученное изменение в генераторе. Существующие безопасные алгоритмы и реализации были полностью протестированы; если вы хотите попробовать небезопасный вариант, вам нужно будет выполнить статистический анализ, чтобы показать, что он, по крайней мере, такой же случайный, как и обычный PRNG.

0 голосов
/ 27 ноября 2014

Это обычно делает их менее детерминированными (плохо, если вы полагаетесь на их детерминизм, что делают многие люди), и может или не может сделать их менее псевдослучайными, в зависимости от их конкретных деталей реализации и тонкостей того, как ваше оборудование ведет себя.

Но обычно люди, пишущие многопоточные приложения, объявляют свое состояние PRNG в TLS (thread-local-storage). Таким образом, это не имеет значения, каждый поток имеет свой собственный PRNG, и гонки не произойдут, если вы не намеренно создадите их. Во всяком случае, не внутри кода PRNG. Это без блокировок и более или менее полная производительность (в зависимости от используемой реализации TLS).

...