Heim >Backend-Entwicklung >C++ >Wie kann ich mit der Funktion „rand()' von C eindeutige Zufallszahlen in mehreren Threads generieren?

Wie kann ich mit der Funktion „rand()' von C eindeutige Zufallszahlen in mehreren Threads generieren?

Barbara Streisand
Barbara StreisandOriginal
2024-12-16 09:28:14985Durchsuche

How Can I Generate Unique Random Numbers in Multiple Threads Using C's `rand()` Function?

Multithread-Verwendung von stdlibs rand()

In Multithread-Programmierszenarien ist es oft notwendig, Zufallszahlen in separaten Threads zu generieren. Bei der Verwendung der Funktion rand() der Standardbibliothek können jedoch Probleme auftreten, wenn sie nicht korrekt gehandhabt wird.

Problem

Mehrere Threads, die dieselbe Funktion ausführen, erzeugen wiederholt dieselbe Zufallszahl. Dies liegt daran, dass jeder Thread normalerweise über eine eigene Kopie globaler Daten verfügt, einschließlich des internen Status von rand(), der von allen Threads gemeinsam genutzt wird.

Lösung

Um zu vermeiden, dass dieselben Zufallszahlen generiert werden , ist es notwendig, den internen Status von rand() explizit zu verwalten. In der Dokumentation wird Folgendes empfohlen:

  • Verwenden Sie rand_r() mit einem expliziten Statuszeiger: rand_r() stellt eine threadsichere Version von rand() bereit, indem es Ihnen ermöglicht, a zu übergeben Zeiger auf eine vorzeichenlose Ganzzahl, die als Status verwendet wird.
  • Verwenden Sie drand48_r(3) für eine schwächere, aber threadsichere Option: drand48_r(3) ist ein alternativer threadsicherer Pseudozufallsgenerator, der einen größeren internen Zustand verwendet.

Beispielverwendung

Für Um beispielsweise rand_r() in einer Multithread-Umgebung zu verwenden, könnten Sie:

#include <stdlib.h>

void* thread_function(void* arg) {
  unsigned int state = 0;  // Thread-specific state
  while (1) {
    int random_number = rand_r(&state);
    // Do something with random_number
  }
  return NULL;
}

Wichtig Hinweis

Es ist zu beachten, dass die Verwendung von rand() oder rand_r() ohne ordnungsgemäße Thread-Synchronisierung zu unvorhersehbarem Verhalten und falschen Ergebnissen führen kann. Stellen Sie stets sicher, dass ordnungsgemäße Synchronisierungsmechanismen vorhanden sind, um den Multithread-Zugriff auf gemeinsam genutzte Ressourcen, einschließlich Zufallszahlengeneratoren, zu bewältigen.

Das obige ist der detaillierte Inhalt vonWie kann ich mit der Funktion „rand()' von C eindeutige Zufallszahlen in mehreren Threads generieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn