50 Stimmen

Verwendung von stdlibs rand() von mehreren Threads aus

Ich habe mehrere Threads, die alle die gleiche Funktion ausführen. In jedem dieser Threads wird mehrmals eine andere Zufallszahl erzeugt. Wir haben versucht, dies zu tun, indem wir srand(time(0)) am Anfang der Funktion, aber es scheint, dass sie alle die gleiche Zahl erhalten.

Müssen wir anrufen srand(time(0)) nur einmal pro Programm, d.h. zu Beginn von main (zum Beispiel), am Anfang jeder Funktion, die mehrmals aufgerufen wird, oder etwas anderes?

2voto

jcoder Punkte 28716

Das ist eine gute Frage. Ich kann sie nicht direkt beantworten, weil ich denke, dass es größere Probleme gibt. Es scheint nicht einmal klar zu sein, dass rand überhaupt thread-sicher ist. Er verwaltet interne Zustände und es scheint nicht gut definiert zu sein, ob das pro Prozess oder pro Thread ist, und wenn es pro Prozess ist, ob es thread-sicher ist.

Um sicher zu sein, würde ich bei jedem Zugriff eine Mutex sperren.

Oder verwenden Sie vorzugsweise eine besser definierte Generierung, z. B. eine von erhöhen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X