Dépannage et fixation des nombres aléatoires répétés
La fonction RandomNumber
, destinée à générer des entiers aléatoires dans une plage donnée, produit des valeurs identiques lorsque plusieurs instances Random
sont créées dans une boucle. Cela se produit parce que chaque instance Random
s'instalalise en utilisant l'heure actuelle. En boucles rapides, le temps reste pratiquement inchangé, conduisant à une génération de nombres aléatoires répétés.
La solution consiste à utiliser une instance unique, partagée Random
pour toute génération de nombres. Cela empêche plusieurs threads de modifier simultanément l'état interne du générateur. La sécurité des fils est cruciale ici.
Voici le code amélioré:
<code class="language-csharp">private static readonly Random random = new Random(); // Single instance public static int RandomNumber(int min, int max) { lock (random) // Thread-safe access { return random.Next(min, max); } }</code>
En utilisant une instruction lock
pour synchroniser l'accès à l'instance unique random
, nous nous assurons que chaque thread obtient un nombre aléatoire unique. Cette méthode est à la fois efficace et fileuse, garantissant l'aléatoire souhaité.
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!