C# рандом отдает одинаковое значение

  • Автор темы Автор темы systema
  • Дата начала Дата начала

systema

Client
Регистрация
25.07.2013
Сообщения
174
Реакции
64
Баллы
28
Всем привет.
Не знай баг ли это, или так оно и должно работать.
В проекте ставлю
C#:
Развернуть Свернуть Копировать
Random rnd = new Random();
int a = rnd.Next(100, 250);
return a;
И если во втором кубике поставлю
C#:
Развернуть Свернуть Копировать
Random rnd = new Random();
int b = rnd.Next(100, 250);
return b;

В мэйкере всегда отдает разные значения, а в зенке несколько запусков разные значения

113033

А потом идет одно и тоже

113034

Как сделать чтобы разные значения были?
 
Самое простое, поставь паузу несколько милисекунд между ними. Thread.Sleep(5);
 
  • Спасибо
Реакции: systema
Почитай как устроен рандом, из-за малого временного промежутка выдает одно и тоже значение, делай как сказали выше, небольшую паузу
 
  • Спасибо
Реакции: systema
Всем привет.
Не знай баг ли это, или так оно и должно работать.
В проекте ставлю
C#:
Развернуть Свернуть Копировать
Random rnd = new Random();
int a = rnd.Next(100, 250);
return a;
И если во втором кубике поставлю
C#:
Развернуть Свернуть Копировать
Random rnd = new Random();
int b = rnd.Next(100, 250);
return b;

В мэйкере всегда отдает разные значения, а в зенке несколько запусков разные значения

Посмотреть вложение 113033

А потом идет одно и тоже

Посмотреть вложение 113034

Как сделать чтобы разные значения были?
надо генерировать псевдо-рандом с другим системным тиком.

113035
 
  • Спасибо
Реакции: systema
Random rnd = new Random();
Вы его каждый раз создаёте в каждом сниппете, а начальное значение у него внутри - тупо время создания.
Необходимо создавать его в общем коде, а Next обернуть в lock (так же в общем коде), что бы каждый поток мог безопасно его использовать (random не потокобезопасен).
 
  • Спасибо
Реакции: BAZAg
Необходим опыт в C# для понимания этой проблемы.

Вы его каждый раз создаёте в каждом сниппете, а начальное значение у него внутри - тупо время создания.
Необходимо создавать его в общем коде, а Next обернуть в lock (так же в общем коде), что бы каждый поток мог безопасно его использовать (random не потокобезопасен).
уже давно бы ваш глобальный рандом обернули бы в лок, было бы круто
 
  • Спасибо
Реакции: BAZAg
  • Спасибо
Реакции: BAZAg и southside
первая строка метода принесла бы такой же результат
нет. проверено на практике. особенно когда код вызывается в одном C# снипетте.
но я не настаиваю на применение моего метода... каждый сам должен пройти путь синяков от граблей ;-)
 
Всем привет.
Не знай баг ли это, или так оно и должно работать.
В проекте ставлю
C#:
Развернуть Свернуть Копировать
Random rnd = new Random();
int a = rnd.Next(100, 250);
return a;
И если во втором кубике поставлю
C#:
Развернуть Свернуть Копировать
Random rnd = new Random();
int b = rnd.Next(100, 250);
return b;

В мэйкере всегда отдает разные значения, а в зенке несколько запусков разные значения

Посмотреть вложение 113033

А потом идет одно и тоже

Посмотреть вложение 113034

Как сделать чтобы разные значения были?
C#:
Развернуть Свернуть Копировать
int num = Global.Variables.MainRandom.GetNext(1, 6);
До этого тоже такая проблема была, еле нашёл на форуме
А до этого вообще как *блан крутил день шаблон без этого кода, только потом обнаружил, что у меня "рандом" в половине потоков одинаковый был, а с этим кодом всё ок, в потоках все уникальные значения (не уверен конечно, но вроде бы это так, судя по логу)
 
Последнее редактирование:
C#:
Развернуть Свернуть Копировать
int num = Global.Variables.MainRandom.GetNext(1, 6);
До этого тоже такая проблема была, еле нашёл на форуме
А до этого вообще как *блан крутил день шаблон без этого кода, только потом обнаружил, что у меня "рандом" в половине потоков одинаковый был, а с этим кодом всё ок, в 1000 потоков все уникальные значения
интересный код, не знал что еще и там вшит рандом. Методы и класс не стандартный. Есть шанс, что он как раз залочен.
@Yuriy Zymlex есть?
 
интересный код, не знал что еще и там вшит рандом. Методы и класс не стандартный. Есть шанс, что он как раз залочен.
@Yuriy Zymlex есть?
Уточнил:
оно там внутри ThreadLocal, поэтому должен быть потокобезопасен
что уже накладывает свои ограничения, если захочется асинхронщины в шаблоне + так же потребуется lock.
 
  • Спасибо
Реакции: southside, BAZAg и doc
Уточнил:

что уже накладывает свои ограничения, если захочется асинхронщины в шаблоне + так же потребуется lock.
Где-то тут давал пример реализации потокобезопасного рандома, что-то подобное в Зенно бы добавить, чтобы с коробки можно было дёргать без таскания кода между шаблонами: https://zennolab.com/discussion/threads/vstavka-randomnogo-teksta-c.75257/post-505869
 
  • Спасибо
Реакции: doc и southside

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)