Maison >développement back-end >C++ >Pourquoi mon générateur de nombres aléatoires produit-il des valeurs identiques et comment puis-je le réparer?

Pourquoi mon générateur de nombres aléatoires produit-il des valeurs identiques et comment puis-je le réparer?

Patricia Arquette
Patricia Arquetteoriginal
2025-02-03 08:36:10778parcourir

Why Does My Random Number Generator Produce Identical Values, and How Can I Fix It?

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!

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