Gewährleistung der Thread-Sicherheit mit dem Zufallszahlengenerator von C#
Die in C# integrierte Random.Next()
-Methode ist nicht threadsicher. Die Verwendung in Multithread-Anwendungen kann aufgrund von Rennbedingungen zu falschen Ergebnissen führen. Glücklicherweise ist das Erstellen einer Thread-sicheren Version unkompliziert.
Ein Thread-sicherer Zufallszahlengenerator
Die folgende ThreadSafeRandom
-Klasse bietet eine Lösung, die Thread-statische Variablen verwendet, um Thread-Sicherheit zu gewährleisten. Jeder Thread erhält seine eigene unabhängige Random
Instanz.
<code class="language-csharp">public class ThreadSafeRandom { private static readonly Random _global = new Random(); [ThreadStatic] private static Random _local; public int Next() { if (_local == null) { int seed; lock (_global) { seed = _global.Next(); } _local = new Random(seed); } return _local.Next(); } }</code>
Seed-Management für eindeutige Zufallszahlen
Ein häufiges Problem bei mehreren Random
Instanzen ist die Generierung ähnlicher oder identischer Zahlen, insbesondere wenn sie schnell hintereinander erstellt werden. Diese Implementierung behebt dieses Problem, indem eine globale Random
-Instanz (_global
) verwendet wird, um eindeutige Seeds für jede Thread-lokale Random
-Instanz (_local
) zu generieren. Die lock
-Anweisung verhindert Race Conditions beim Zugriff auf das globale Random
für die Seed-Generierung.
Diese Methode gewährleistet unterschiedliche Startwerte für jeden Thread, was zu wirklich zufälligen und unabhängigen Zahlenfolgen führt. Entwickler können die Zufallszahlengenerierung jetzt sicher in Multithread-Anwendungen verwenden und so die Fallstricke nicht-threadsicherer Ansätze vermeiden.
Das obige ist der detaillierte Inhalt vonWie kann ich in C# einen Thread-sicheren Zufallszahlengenerator erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!