LINUX.ORG.RU

История изменений

Исправление MKuznetsov, (текущая версия) :

а как часто в указанных «разных процессах» вы дёргаете rand() ? и сколько всего этих процессов. И как они стартуют.

если процессы стартуют одновременно, в течении 1-й секунды то srand(time(NULL)) инициализует seed одинаково, и первое-же обращение к rand() выдаст одинаковые числа. ВЫХОД: srand() инициализуйте иначе. Например добавив pid() - как-то добейтесь инициализации гарантированно разными числами

если используете rand() из многих процессов то получить одинаковое случайное числа (но не одинаковые последовательности), вообще говоря не фантастика - диапазон всего 0..RAND_MAX. Если это критично, то ВЫХОД: увеличьте разрядность, например взяв два/три случайных числа в разные биты.

когда пишется мат.софт (например монте-карло), то стоит использовать аналоги rand() из соответсвующих мат.библиотек. Они «хорошие» - выдают требуемые распределения в требуемой разрядности и видах (long,double)

если вская защита, сети, шифрования - то используется криптостойкий rand() из их библиотек. openssl упомянули, я ещё использовал https://doc.libsodium.org/generating_random_data .

Исходная версия MKuznetsov, :

а как часто в указанных «разных процессах» вы дёргаете rand() ? и сколько всего этих процессов. И как они стартуют.

если процессы стартуют одновременно, в течении 1-й секунды то srand(time(NULL)) инициализует seed одинаково, и первое-же обращение к rand() выдаст одинаковые числа. ВЫХОД: srand() инициализуйте иначе. Например добавив pid() - как-то добейтесь инициализации гарантированно разными числами

если используете rand() из многих процессов то получить одинаковое случайное числа (но не одинаковые последовательности), вообще говоря не фантастика - диапазон всего 0..RAND_MAX. Если это критично, то ВЫХОД: увеличьте разрядность, например взяв два/три случайных числа в разные биты.