У меня проблемы с классом Random в .NET, я реализую многопоточную коллекцию, которая работает нормально, за исключением одной мелкой детали. Коллекция представляет собой список пропусков , и те из вас, кто знаком с ним, знают, что для каждого вставленного узла мне нужно сгенерировать новую высоту <= CurrentMaxHeight+1
, вот код, который я использую для этого Я знаю, что это очень неэффективно, но это работает, и это мой главный приоритет)
int randomLevel()
{
int height = 1;
while(rnd.NextDouble() >= 0.5 && height < MaxHeight)
++height;
return height;
}
Моя проблема здесь в том, что иногда я продолжаю получать только 1 из этого для нескольких тысяч элементов подряд, что убивает производительность списка пропусков. Вероятность того, что 10.000 элементов сгенерируют только 1 из этого метода подряд, кажется очень малой (происходит довольно последовательно).
Так что я предполагаю (догадываюсь) , что в некотором роде есть проблема с объектом Random
, но я не знаю, с чего начать копаться. Поэтому я обращаюсь к stackoverflow, чтобы узнать, есть ли у кого-нибудь идея?
Редактировать
rnd-переменная объявлена в классе SkipList<T>
, и к ней получают доступ из нескольких потоков (каждый поток вызывает .Add для коллекции и Add вызывает .randomLevel)