Ok. Voici ce que je sais ça ne marchera pas:Manière correcte d'utiliser Random dans l'application multithread
int Rand()
{
//will return the same number over and over again
return new Random().Next();
}
static Random rnd=new Random();
int Rand()
{
//if used like this from multiple threads, rnd will dissintegrate
//over time and always return 0
return rnd.Next();
}
Cela fonctionne correctement, mais si elle est utilisée par plusieurs threads, l'utilisation du processeur va bien, ce que je ne veux pas, et que je pense n'est pas Donc, y a-t-il une classe aléatoire thread-safe pour C#, ou une meilleure façon de l'utiliser?
Essayez un 'ThreadLocal'. 'private static readonly ThreadLocal rand = new ThreadLocal (() => new Random());' –
@JeroenVannevel: Vous voudrez probablement randomiser les graines des instances 'Random', car sinon les threads démarrent en même temps obtiendrait la même séquence de nombres aléatoires. – dtb
.. et de prendre une instance aléatoire statique globale verrouillée pour la graine des instances aléatoires ThreadLocal. – Ralf