Ho problemi con la classe Random in .NET, sto implementando una raccolta con thread che funziona bene, tranne che per un dettaglio più piccolo. La collezione è una Skip list e chi di voi ha dimestichezza sa che per ogni nodo inserito ho bisogno di generare una nuova altezza che sia <= CurrentMaxHeight+1
, ecco il codice che sto usando per farlo (so che è molto inefficiente, ma funziona e questo è la mia priorità principale ora)Problema con casuale e discussioni in .NET
int randomLevel()
{
int height = 1;
while(rnd.NextDouble() >= 0.5 && height < MaxHeight)
++height;
return height;
}
il mio problema è che a volte continuo a ricevere solo 1 indietro da questo per diverse migliaia di elementi di fila che uccide le prestazioni della skip list. La possibilità per 10.000 elementi di generare solo 1 da questo metodo di fila, sembra molto sottile (accade abbastanza coerentemente).
Così sto supponendo (indovinare) che c'è un problema con l'oggetto Random
in qualche modo, ma io non so davvero da dove cominciare a scavare intorno. Quindi mi rivolgo a StackOverflow per vedere se qualcuno ha un'idea?
Modifica
La variabile RND viene dichiarata nella classe SkipList<T>
, e vi si accede da diversi thread (ogni thread chiama .Add sulla raccolta e aggiungere chiamate .randomLevel)
Dove è dichiarato 'rnd'? – ChrisF
è il randomlevel() chiamato da un thread separato? – Benny
aggiunta dichiarazione per chiarezza, è dichiarata una volta e quindi chiamata da diversi thread differenti. – thr