Verständnis und Behebung von wiederholten Zufallszahlen in der Programmierung
Ein häufiges Programmierungsproblem beinhaltet zufällige Zahlengeneratoren (RNGs), die wiederholt dieselbe Zahl ausgeben. Dies geschieht normalerweise, wenn der RNG in einer Schleife mehrmals wieder initialisiert wird, wodurch neue Random
Instanzen erstellt werden.
Das Problem erklärte
untersuchen wir dieses Problem mit einem Beispiel:
<code class="language-csharp">public static int RandomNumber(int min, int max) { Random random = new Random(); // Problem: New instance each time return random.Next(min, max); } byte[] mac = new byte[6]; for (int x = 0; x < 6; x++) { mac[x] = (byte)RandomNumber(0, 255); }</code>
Debugging kann während jeder Schleifen -Iteration unterschiedliche Werte zeigen. Das Einstellen eines Haltepunkts nach der Schleife zeigt jedoch, dass alle Elemente im mac
-Array denselben Wert enthalten.
Die Lösung: Eine einzelne zufällige Instanz
Die Grundursache erstellt ein neues Random
-Objekt in der Schleife. Da Random
häufig die Systemuhr zum Aussaat verwendet, führt das Erstellen mehrerer Instanzen in schneller Folge zu identischen Samenwerten und somit wiederholte Zahlen.
Die Lösung ist einfach: Verwenden Sie eine einzelne statische Instanz von Random
im gesamten Code:
<code class="language-csharp">private static readonly Random random = new Random(); public static int RandomNumber(int min, int max) { return random.Next(min, max); } byte[] mac = new byte[6]; for (int x = 0; x < 6; x++) { mac[x] = (byte)RandomNumber(0, 255); }</code>
Multithreading und Fadensicherheit
In multitHhread -Anwendungen erfordert der Zugriff auf eine gemeinsam genutzte Random
-Stanz eine Synchronisation, um die Rassenbedingungen zu verhindern. Dies kann mit einem Schloss erreicht werden:
<code class="language-csharp"> private static readonly Random random = new Random(); private static readonly object syncLock = new object(); public static int RandomNumber(int min, int max) { lock (syncLock) { return random.Next(min, max); } } ``` This ensures thread safety when generating random numbers concurrently.</code>
Das obige ist der detaillierte Inhalt vonWarum produziert mein Zufallszahlengenerator wiederholt die gleiche Zahl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!