J'ai des problèmes avec la classe Random dans .NET, j'implémente une collection threadée qui fonctionne bien, sauf pour un détail plus petit. La collection est un Skip list et ceux d'entre vous qui le connaissent savent que pour chaque nœud inséré, je dois générer une nouvelle hauteur qui est <= CurrentMaxHeight+1
, voici le code que j'utilise pour le faire (je sais que c'est très inefficace, mais ça marche et c'est ma priorité maintenant)Problème avec Random et Threads dans .NET
int randomLevel()
{
int height = 1;
while(rnd.NextDouble() >= 0.5 && height < MaxHeight)
++height;
return height;
}
mon problème est que parfois je continue à obtenir seulement 1 retour de cela pour plusieurs milliers d'éléments dans une rangée qui tue les performances de la liste de saut. La chance pour 10.000 éléments de générer seulement 1 de cette méthode dans une rangée, semble très mince (arrive assez régulièrement).
Je suppose donc (devinettes) qu'il ya un problème avec l'objet Random
d'une certaine façon, mais je ne sais pas vraiment où commencer à creuser autour. Alors je me tourne vers stackoverflow pour voir si quelqu'un a une idée?
Modifier
La rnd variable est déclarée dans la classe SkipList<T>
, et il est accessible à partir de plusieurs threads (chaque thread appelle .Add sur la collecte et ajouter des appels .randomLevel)
Où 'rnd' est-il déclaré? – ChrisF
est le randomlevel() appelé à partir d'un thread séparé? – Benny
déclaration ajoutée pour plus de clarté, il est déclaré une fois, puis appelé à partir de plusieurs threads différents. – thr