случайные числа и множественные звонки

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

Я заметил, что многие документы рекомендуют звонитьsrand только один раз в программе. Например:Случайные числа в Cвыбранный ответ: «Как правило, вызывайте srand () только один раз в вашей программе».

Но почему? Почему было бы так плохо делать что-то вроде этого:

int THIS_THREAD_SEED;
int randomness() {
    ++THIS_THREAD_SEED;
    int i;
    for(i=0 i<1000; i++) {
        unsigned n = rand_r(&THIS_THREAD_SEED) / RAND_MAX;
        /* do something with n */
    }
    return 0;
}

int do_something() {
    int i;
    for(i=0; i<1000; i++) {
        randomness();
    }
}

Таким образом, начальное число изменяется один раз за вызов функции, а не один раз за программу. Таким образом, независимо от того, сколько потоков запущено, никакие два потока не будут иметь одинаковый список случайных чисел ... Верно?

ОБНОВИТЬ Предположим, у меня либо уникальное начальное число для каждого потока, либо мьютекс в глобальном SEED для предотвращения условий гонки.

Ответы на вопрос(3)

Ваш ответ на вопрос