Heim > Backend-Entwicklung > C++ > Ist Random.Next() von C# Thread-sicher und wie können Sie eine Thread-sichere Alternative erstellen?

Ist Random.Next() von C# Thread-sicher und wie können Sie eine Thread-sichere Alternative erstellen?

Susan Sarandon
Freigeben: 2025-01-21 02:51:17
Original
801 Leute haben es durchsucht

Is C#'s Random.Next() Thread-Safe, and How Can You Create a Thread-Safe Alternative?

Thread-Sicherheitsprobleme im C#-Zufallszahlengenerator

Bei der Softwareentwicklung ist die Gewährleistung eines sicheren Zugriffs auf gemeinsam genutzte Ressourcen in einer Multithread-Umgebung von entscheidender Bedeutung. Die Random.Next()-Methode von C# wird zum Generieren von Zufallszahlen verwendet, aber ihre Thread-Sicherheit ist es wert, untersucht zu werden.

Ist

Random.Next() threadsicher?

Nein. Wenn mehrere Threads gleichzeitig dieselbe Random.Next()-Instanz verwenden, kann dies zu unvorhersehbarem Verhalten und möglicherweise sogar zu einer Reihe von Nullwerten führen.

Erstellen Sie einen Thread-sicheren Zufallszahlengenerator

Um eine Thread-sichere Version der Random-Klasse zu erstellen, wird der folgende Ansatz empfohlen:

<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

So funktioniert es:

Diese Klasse erreicht Thread-Sicherheit, indem sie für jeden Thread eine eindeutige statische Random Instanz verwaltet. Wenn ein neuer Thread auf diese Klasse zugreift, generiert er einen Startwert aus der globalen Random-Instanz und stellt so sicher, dass die Sequenz pro Thread eindeutig ist.

Kleinere Probleme von Randomgelöst

Die

Random-Klasse verfügt außerdem über eine Funktion: Wenn mehrere Instanzen innerhalb eines kurzen Zeitraums (innerhalb von 15 Millisekunden) erstellt werden, können sie dieselbe Sequenz zurückgeben. Um dieses Problem zu mildern, verwenden Sie globale Random-Instanzen, um Seeds zu generieren und so Konflikte zu vermeiden.

Fazit:

Das Verständnis der Thread-Sicherheitseinschränkungen von C# Random.Next() und die Implementierung einer Thread-sicheren Version können eine zuverlässige Zufallszahlengenerierung in Multithread-Anwendungen gewährleisten.

Das obige ist der detaillierte Inhalt vonIst Random.Next() von C# Thread-sicher und wie können Sie eine Thread-sichere Alternative erstellen?. 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