Если вы используете функцию библиотеки C rand
, эта функция не является повторно входящей или поточно-ориентированной.POSIX предоставляет функцию rand_r
, но (цитируя документацию по glibc):
POSIX.1 расширяет стандартные функции C, чтобы поддерживать воспроизводимые случайные числа в многопоточных программах.Однако расширение плохо спроектировано и непригодно для серьезной работы.
В частности, начальное число должно быть целым числом без знака, в котором недостаточно битов для хорошего PRNG.Они рекомендуют использовать функции случайных чисел SVID, из которых nrand48_r
, вероятно, то, что вы ищете.
В качестве альтернативы, вы можете использовать другую библиотеку.