Вопрос

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


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

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

Решение

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

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

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

когда основными последствиями этих ошибок являются непредсказуемые результаты, и в этом смысл PRNG?

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

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

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

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