Maison >développement back-end >C++ >Comment puis-je générer des nombres aléatoires thread-safe en C ?

Comment puis-je générer des nombres aléatoires thread-safe en C ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-05 11:06:10476parcourir

How Can I Generate Thread-Safe Random Numbers in C  ?

Génération de nombres aléatoires multithread avec rand() de stdlib

Lors de la génération de nombres aléatoires à partir de plusieurs threads qui exécutent la même fonction, il est crucial de comprendre comment fonctionne la fonction rand().

Importance de srand(time(0))

srand(time(0)) initialise la graine du générateur de nombres aléatoires. Il est généralement recommandé d'appeler cette fonction une seule fois par programme, idéalement au début de la fonction main(). Cela garantit une graine unique pour toute la durée du programme.

Considérations sur la sécurité des threads

Cependant, il est important de noter que rand() n'est pas thread-safe, ce qui signifie qu'il est il n'est pas garanti de produire des numéros uniques lorsqu'il est utilisé simultanément par plusieurs threads. Comme l'indique la documentation, il utilise un état caché qui est modifié à chaque appel.

Alternatives pour les applications multithread

Pour la génération de nombres aléatoires thread-safe, il est conseillé d'utiliser la fonction rand_r() à la place. Cette fonction prend un paramètre d'état explicite, qui permet à plusieurs threads d'amorcer le générateur indépendamment.

Alternativement, la fonction drand48_r(3) offre un générateur pseudo-aléatoire de haute qualité adapté aux environnements multithread. Il utilise un état interne plus grand que rand_r(), ce qui entraîne une meilleure qualité aléatoire.

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