Ich habe Probleme mit der Klasse Random in .NET, ich bin eine Thread-Sammlung implementieren, die gut funktioniert, bis auf ein kleineres Detail. Die Sammlung ist ein Skip list und die von Ihnen vertrauten wissen, dass ich für jeden eingefügten Knoten eine neue Höhe erzeugen muss, die <= CurrentMaxHeight+1
ist, hier ist der Code, den ich dazu verwende (ich weiß, dass es sehr ineffizient ist, aber es funktioniert und das ist meine Hauptpriorität jetzt) Problem mit Random und Threads in .NET
int randomLevel()
{
int height = 1;
while(rnd.NextDouble() >= 0.5 && height < MaxHeight)
++height;
return height;
}
Mein Problem hier ist, dass ich manchmal bekomme immer nur 1 von diesen zurück für mehrere tausend Elemente in einer Reihe, die die Leistung der Sprungliste tötet. Die Chance für 10.000 Elemente, aus dieser Methode nur 1 zu generieren, scheint sehr gering (passiert ziemlich konsequent).
Ich gehe davon So (erraten), dass es ein Problem mit dem in irgendeine Weise Random
Objekt ist, aber ich weiß nicht wirklich, wo um zu graben zu beginnen. Also wende ich mich Stackoverflow zu, um zu sehen, ob jemand eine Idee hat?
bearbeiten
Die RND-Variable wird SkipList<T>
in der Klasse deklariert, und es ist aus mehreren Fäden zugegriffen wird (jeder Thread ruft .Add auf die Sammlung und Hinzufügen Anrufe .randomLevel)
Wo wird 'rnd' deklariert? – ChrisF
ist der randomlevel() aus einem separaten Thread aufgerufen? – Benny
hinzugefügt Erklärung für Klarheit, es ist einmal erklärt und dann aus mehreren verschiedenen Threads aufgerufen. – thr