Генерация псевдослучайных чисел Random.Next(Int32, Int32)
От: this  
Дата: 20.02.17 15:54
Оценка:
Приветствую всех!

Для генерации чисел использую метод Random.Next(Int32, Int32):
https://msdn.microsoft.com/ru-ru/library/2dx6wyd4(v=vs.110).aspx

При повторном вызове функции, в которой задействован этот метод, генерируются одинаковые числовые значения. Это описано здесь:
https://habrahabr.ru/post/165459/

Подскажите, пожалуйста, как задействовать данный класс в другой функции для генерации псевдослучайных чисел с помощью Random.Next(Int32, Int32):
public static class RandomProvider
{
    private static int seed = Environment.TickCount;

    private static ThreadLocal<Random> randomWrapper = new ThreadLocal<Random>(() =>
        new Random(Interlocked.Increment(ref seed))
    );

    public static Random GetThreadRandom()
    {
        return randomWrapper.Value;
    }
}


PS Недавно программирую на C#, поэтому прошу помощи.
Отредактировано 20.02.2017 15:56 this . Предыдущая версия . Еще …
Отредактировано 20.02.2017 15:55 this . Предыдущая версия .
потокобезопасность псевдослучайные
Re: Генерация псевдослучайных чисел Random.Next(Int32, Int32)
От: Sinix  
Дата: 20.02.17 16:18
Оценка: 3 (1) +1
Здравствуйте, this, Вы писали:

T>Подскажите, пожалуйста, как задействовать данный класс в другой функции для генерации псевдослучайных чисел с помощью Random.Next(Int32, Int32):T>[/cs]

Если правильно понял вопрос, то как-то так:
Random rnd = RandomProvider.GetThreadRandom();

int value = rnd.Next(0, 100);
Re[2]: Генерация псевдослучайных чисел Random.Next(Int32, Int32)
От: this  
Дата: 20.02.17 17:14
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Если правильно понял вопрос, то как-то так:

S>
S>Random rnd = RandomProvider.GetThreadRandom();

S>int value = rnd.Next(0, 100);
S>


Да, поняли правильно. Теперь всё работает корректно. Спасибо.
Re: Генерация псевдослучайных чисел Random.Next(Int32, Int32)
От: DreamMaker  
Дата: 21.02.17 03:22
Оценка: +1
Здравствуйте, this, Вы писали:

T>Для генерации чисел использую метод Random.Next(Int32, Int32):


к слову, Random НЕ thread-safe. если его дергать из разных потоков, он ВНЕЗАПНО и сильно не сразу может начать выдавать одни нули. налетел в свое время на это дело смачно.
In P=NP we trust.
Re[2]: Генерация псевдослучайных чисел Random.Next(Int32, Int32)
От: Sinix  
Дата: 21.02.17 05:29
Оценка:
Здравствуйте, DreamMaker, Вы писали:

DM>к слову, Random НЕ thread-safe. если его дергать из разных потоков, он ВНЕЗАПНО и сильно не сразу может начать выдавать одни нули. налетел в свое время на это дело смачно.

+1. В коде в первом посте для этого подстраховка — ThreadLocal<Random>().
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.