Maison > développement back-end > C++ > Random.Next() de C# est-il thread-safe et comment pouvons-nous y parvenir ?

Random.Next() de C# est-il thread-safe et comment pouvons-nous y parvenir ?

Barbara Streisand
Libérer: 2025-01-21 02:46:13
original
190 Les gens l'ont consulté

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

Sécurité des threads du générateur de nombres aléatoires C#

La méthode

en C# est-elle thread-safe et permet-elle d'utiliser plusieurs threads simultanément ? La réponse est malheureusement non. L'utilisation de la même instance dans plusieurs threads peut entraîner une corruption des données, se manifestant par le renvoi de 0 consécutifs. Random.Next()

Heureusement, il est possible de créer une variante thread-safe sans utiliser de verrou encombrant à chaque

appel. En nous appuyant sur des concepts présentés dans un article éclairant, nous proposons une solution : Next()

<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>
Copier après la connexion
Le cœur de cette approche est de maintenir une instance

statique distincte pour chaque thread. Mais même cette simple mise en œuvre se heurte à un autre écueil. Lorsque plusieurs instances sont initialisées sur une courte période (environ 15 millisecondes), elles suivent par défaut la même séquence. Pour résoudre ce problème, nous introduisons une instance statique globale Random spécifiquement utilisée pour générer des graines pour chaque thread. Random

L'article mentionné ci-dessus fournit un code illustratif qui détaille ces deux considérations et fournit des conseils approfondis sur les subtilités de

en C#. Random

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal