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