Maison > développement back-end > C++ > La méthode Random.Next() de C# est-elle thread-safe et comment puis-je y parvenir ?

La méthode Random.Next() de C# est-elle thread-safe et comment puis-je y parvenir ?

Patricia Arquette
Libérer: 2025-01-21 02:37:07
original
623 Les gens l'ont consulté

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

Sécurité des threads de la méthode C# Random.Next()

La méthode

de Random.Next()C# n'est pas thread-safe. L'utilisation de la même instance Random à partir de plusieurs threads peut entraîner un comportement imprévisible, voire renvoyer un résultat composé uniquement de 0.

Solution

Pour créer une version thread-safe de Random, nous pouvons créer des instances locales pour chaque thread. Le code suivant le démontre :

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();
    }
}
Copier après la connexion

Cette classe maintient une variable Random statique distincte (_local) pour chaque thread. Pour éviter les conflits entre les instances créées en même temps, utilisez des instances Random statiques globales (_global) pour amorcer des instances locales de thread.

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!

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