Thread-Sicherheit der C# Random.Next()-Methode
Die Random.Next()
-Methode von C# ist nicht threadsicher. Die Verwendung derselben Random
-Instanz aus mehreren Threads kann zu unvorhersehbarem Verhalten oder sogar zur Rückgabe eines Ergebnisses mit ausschließlich Nullen führen.
Lösung
Um eine Thread-sichere Version von Random
zu erstellen, können wir für jeden Thread lokale Instanzen erstellen. Der folgende Code demonstriert dies:
<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>
Diese Klasse verwaltet eine separate statische Random
Variable (_local
) für jeden Thread. Um Konflikte zwischen gleichzeitig erstellten Instanzen zu vermeiden, verwenden Sie globale statische Random
-Instanzen (_global
), um Thread-lokale Instanzen zu starten.
Das obige ist der detaillierte Inhalt vonIst die Random.Next()-Methode von C# threadsicher und wie kann ich sie dafür sorgen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!