liczby losowe i wiele połączeń srand

Piszę program, który wygeneruje wiele liczb losowych w pętlach. Staram się, aby liczby były nieco mniej przewidywalne (nie tylko dla bezpieczeństwa, ale aby uniknąć kolizji na wielu wątkach).

Zauważyłem, że wiele dokumentów zaleca dzwonieniesrand tylko raz w programie. Na przykład:Losowe liczby w C, wybrana odpowiedź brzmi: „Zasadniczo wywołaj srand () tylko raz w swoim programie”.

Ale dlaczego? Dlaczego byłoby tak źle robić coś takiego:

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

W związku z tym ziarno zmienia się raz na wywołanie funkcji, a nie raz na program. W ten sposób, niezależnie od liczby uruchomionych wątków, żadne dwa wątki nie będą miały tej samej listy liczb losowych ... prawda?

AKTUALIZACJA Załóżmy, że mam unikalny materiał siewny dla każdego wątku lub mutex na globalnym SEED, aby zapobiec warunkom wyścigu.

questionAnswers(3)

yourAnswerToTheQuestion