LINUX.ORG.RU

Странности с random()


0

0

Есть такая фигня:

В стороннем коде (либа) используется фунция random().
В моем приложении, использующем этот код встречаются повторения
чисел, генерируемых random() на последовательности в 40 вызовов ( в разных опытах от 2 до 4 повторений, но стабильно есть).

Я написал простенькое приложение, вызывающее такой же самый код ( но
копию! ) в двух потоках
( первое приложение тоже многопоточное ) - никаких проблем: каждый поток вызывает ее 10000 раз и повторений нет!

1) Как мне убедиться, что вызывемая в обоих приложениях функция одна и та же?
BTW, я смотрел с помощью readelf <exe>| grep random оба файла и получил
такой результат:
для первого:
264: 8056cb0 91 FUNC GLOBAL 0 UND random@GLIBC_2.0 (3)
714: 8057f50 84 FUNC GLOBAL 0 UND srandom@GLIBC_2.0 (3)
для второго:
85: 804b2a0 91 FUNC GLOBAL 0 UND random@GLIBC_2.0 (2)
216: 804b810 84 FUNC GLOBAL 0 UND srandom@GLIBC_2.0 (2)

Настораживает только "(2)" и "(3)" - что это я не знаю.

2) Есть какие-нибудь идеи как найти причину?

Система Linux RH6.2, ядро 2.2.21, gcc 2.95.3, glibc 2.1.3

anonymous

Я как-то поработал с random(). Мне он не понравился.

Я написал ему замену, через использование файла /dev/urandom Этот файл на сколько я разобрался обновляется при каждом чтении.

Я в начале программы читаю из него в буфер. это что-то вроде initstate() В итоге получается набор рандомных цифир.

Далее остается только написать свой random(), который просто выбирает из этого массива числа.

Недостатков данного метода я пока не обнаружил.

Dead ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.