números aleatórios e várias chamadas srand

Eu estou escrevendo um programa que irá gerar numerosos números aleatórios em loops. Estou tentando tornar os números um pouco menos previsíveis (não apenas por segurança, mas para evitar colisões em vários segmentos).

Eu notei que muitos documentos recomendavam chamadassrand apenas uma vez no programa. Por exemplo:Números aleatórios em C, a resposta selecionada é "Como regra geral, apenas chame srand () uma vez no seu programa".

Mas por que? Por que seria tão ruim fazer algo assim:

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, a semente muda uma vez por chamada de função, não uma vez por programa. Dessa forma, não importa quantos threads estejam sendo executados, nenhum dos dois threads terá a mesma lista de números aleatórios ... Certo?

ATUALIZAR Suponha que eu tenha uma semente única para cada thread ou mutex em um SEED global para evitar condições de corrida.

questionAnswers(3)

yourAnswerToTheQuestion