números aleatorios y múltiples llamadas srand

Estoy escribiendo un programa que generará numerosos números aleatorios en bucles. Estoy tratando de hacer que los números sean menos predecibles (no solo por seguridad, sino también para evitar colisiones en varios subprocesos).

He notado que muchos documentos recomiendan llamarsrand Solo una vez en el programa. Por ejemplo:Números aleatorios en C, la respuesta seleccionada es "Como regla general, solo llame a srand () una vez en su programa".

¿Pero por qué? ¿Por qué sería tan malo hacer algo como esto?

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();
    }
}

Como tal, la semilla cambia una vez por llamada de función, no una vez por programa. De esta manera, no importa cuántos subprocesos se estén ejecutando, no habrá dos que tengan la misma lista de números aleatorios ... ¿verdad?

ACTUALIZAR Supongamos que tengo una semilla única para cada hilo, o mutex en una SEED global para evitar condiciones de carrera.

Respuestas a la pregunta(3)

Su respuesta a la pregunta