Wie benutze ich rand_r und wie benutze ich es Thread-sicher?

Ich versuche zu lernen, wie zu verwenden, rand_r, und nach der Lektüre diese Frage ich bin immer noch ein wenig verwirrt, kann mir bitte jemand einen Blick darauf werfen und zeigen, was ich bin fehlt? Nach meinem Verständnis, rand_r nimmt einen Zeiger auf einen Wert (oder einen Speicherbereich mit einigen Anfangswert), und Sie verwenden es zur Erzeugung neuer zahlen, jedes mal wenn es aufgerufen wird. Jeder thread, der fordert, rand_r liefern sollte, Sie mit einem eindeutigen Zeiger (oder Speicherbereich), um das "eigentliche " zufällige" zahlen zwischen verschiedenen threads. Deshalb:

int globalSeed;

//thread 1
rand_r(&globalSeed);

//thread 2
rand_r(&globalSeed);

ist der falsche Weg, es zu benutzen. Wenn ich

int seed1,seed2;

//thread 1
rand_r(&seed1);

//thread 2
rand_r(&seed2);

dies der richtige Weg wäre, um zu generieren "true random" zahlen zwischen threads?


EDIT: zusätzliche Fragen nach der Lektüre Antworten auf die oben genannten Artikel:

  1. wenn in thread 1, ich brauche eine zufällige
    Zahl zwischen 1 bis n soll ich tun
    (rand_r(&seed1) % (n-1)) + 1 ? Oder gibt es andere übliche Weg, dies zu tun?
  2. Ist es richtig oder normal ist, wenn der Speicher für die Samen ist dynamisch zugeteilt?

InformationsquelleAutor der Frage derrdji | 2010-10-19

Schreibe einen Kommentar