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
Patricia Arquetteoriginal
2025-01-21 02:37:07624parcourir

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 :

<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>

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:
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