Frage

Wie im Titel. Suspekt es ist, aber ich konnte es nicht überall ausdrücklich erwähnt finden. Und für dieses Objekt möchte ich nicht auf Spekulationen angewiesen.

War es hilfreich?

Lösung

Wenn Sie die multithreaded Version die CRT, sind alle Funktionen threadsicher, da jede threadspezifische Informationen gespeichert ist TLS . rand_s eigentlich nicht Zustandsinformationen in erster Linie verwendet werden, da es nur ein Betriebssystem-API-Aufrufe, so Frage der Thread-Sicherheit nicht für rand_s entsteht nicht. rand (), hängt jedoch von einem Seed-Wert eine Zufallszahl zu erzeugen.

Andere Tipps

Chris sagte:. rand() ist nicht Thread-sicher, da ihr interner Zustand statisch ist, sondern rand_s() sollte Thread-sicher, aber sein

Jeff fügte jedoch hinzu, dass mit der Multithreading-Version von MSVCRT, rand() des Staates in Thread-lokalen Speicher gehalten wird, so dass es noch in Ordnung ist.

Visual Studio kommt mit der Quelle bis zur Laufzeitbibliothek. Während einige es kann ziemlich schmerzhaft sein waten durch, rand_s () ist ziemlich einfach.

All rand_s () ist SystemFunction036 nicht nennen () in ADVAPI32.DLL den Zufallswert zu erhalten. Alles, was in ADVAPI32.DLL sollte Thread-sicher sein.

Ihrerseits rand_s () erhält den Zeiger auf die Funktion in einem Thread-sichere Weise.

Ich weiß nicht, ob rand_s Thread-sicher ist, aber es scheint, wie es wahrscheinlich ist, da es eine Hin- und Rückfahrt mit dem O für Entropie zu machen scheint. (Solange Sie auf den Multi-Thread-CRT VC ++ verknüpfen, sind alle Wetten ab, wenn Sie die Single-Thread-Link ein)

Wenn es durch Fenster CRT unterstützt wird, können Sie einen Anruf versuchen, rand_r das ist die Posix-Reentry-Version von rand. Oder noch besser boost :: zufällig, wenn Sie bereits boost.

bedenkt, wie Pervasive Multi-Threading bald sein wird, sollte sich niemand mehr in neuen Code mit rand () werden. - immer versuchen rand_r zu verwenden / rand_s / boost / verschiedene plattformabhängige sichere rands / etc

kann ich mich keinen Grund, warum rand_s () oder sogar rand () würde nicht Thread-sicher.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top