Tengo problemas con la clase Random en .NET, estoy implementando una colección de subprocesos que funciona bien, excepto por un detalle más pequeño. La colección es Skip list y aquellos que estén familiarizados con ella saben que para cada nodo insertado necesito generar una nueva altura que sea <= CurrentMaxHeight+1
, aquí está el código que estoy usando para hacer eso (sé que es muy ineficiente, pero funciona y esa es mi principal prioridad ahora)Problema con Random and Threads en .NET
int randomLevel()
{
int height = 1;
while(rnd.NextDouble() >= 0.5 && height < MaxHeight)
++height;
return height;
}
mi problema aquí es que a veces me siguen dando sólo el 1 volver de este durante varios miles de elementos en una fila que mata el rendimiento de la lista de salto. La posibilidad de que 10.000 elementos generen solo 1 de este método en una fila, parece muy delgada (ocurre de manera bastante consistente).
así que estoy asumiendo (adivinanzas) que hay un problema con el objeto Random
de alguna manera, pero no se sabe muy bien por dónde empezar a excavar alrededor. Entonces, ¿recurro a stackoverflow para ver si alguien tiene una idea?
Editar
El rnd-variable se declara en la clase SkipList<T>
, y se accede a ella desde varios hilos (cada subproceso llama .Add en la recogida y agregar llamadas .randomLevel)
¿Dónde se declara 'rnd'? – ChrisF
es el randomlevel() llamado desde un hilo separado? – Benny
declaración agregada para mayor claridad, se declara una vez y luego se llama desde varios subprocesos diferentes. – thr