Heim > Backend-Entwicklung > C++ > Ist die Random.Next()-Methode von C# threadsicher und wie kann ich sie dafür sorgen?

Ist die Random.Next()-Methode von C# threadsicher und wie kann ich sie dafür sorgen?

Patricia Arquette
Freigeben: 2025-01-21 02:37:07
Original
503 Leute haben es durchsucht

Is C#'s Random.Next() Method Thread-Safe, and How Can I Make It So?

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage