Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2011, 18:46   #1
MasterSporta
Пользователь
 
Регистрация: 13.12.2010
Сообщений: 56
По умолчанию Рандомятся одинаковые числа

Здравствуйте!
Возникла маленькая неувязочка. Программа содержит десять потоков, в каждом из которых заполняется структура из чисел, которые генерируются случайным образом. Почему соответствующие числа десяти структур одинаковые. Пользуюсь функциями srand() и rand(). Что не так?
Всем спасибо!
MasterSporta вне форума Ответить с цитированием
Старый 10.12.2011, 18:58   #2
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

srand() должна вызываться только один раз за время работы программы
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 10.12.2011, 19:25   #3
MasterSporta
Пользователь
 
Регистрация: 13.12.2010
Сообщений: 56
По умолчанию

пробовал и так. Это ничего не меняет. Я не могу понять причины, почему все потоки рандомят одинаковые числа. Не могут же они физически выполнятся в одно и то же время.
MasterSporta вне форума Ответить с цитированием
Старый 10.12.2011, 19:30   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

показывайте код.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.12.2011, 19:39   #5
MasterSporta
Пользователь
 
Регистрация: 13.12.2010
Сообщений: 56
По умолчанию

Код:
void client(PVOID p)
{
	EnterCriticalSection(&cs);
	DWORD dwStartTickCount = GetTickCount();
	PTDATA data = new TDATA;
	
	data->cPriority = rand();
	data->dwClientId = rand()%100;
	data->dwTicks = GetTickCount() - dwStartTickCount;
	mediator(data);
	
	LeaveCriticalSection(&cs);
}
Это функция потока, которых десять штук. И вот значение сPriority и dwClientId для всех потоков одно и то же.
MasterSporta вне форума Ответить с цитированием
Старый 10.12.2011, 21:29   #6
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

MasterSporta

Программа содержит десять потоков, в каждом из которых заполняется структура из чисел, которые генерируются случайным образом. Почему соответствующие числа десяти структур одинаковые. Пользуюсь функциями srand() и rand(). Что не так?

srand инициализирует генератор только для текущего потока.
При этом, даже если сделать инициализацию в каждом потоке, если потоки запускаются быстро, велика вероятность что time(NULL) выдаст одинаковые значения.

Отсюда мораль: не использовать rand(). есть другие альтернативы, например rand_s() или Boost.Random
Rififi вне форума Ответить с цитированием
Старый 11.12.2011, 13:04   #7
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

Rififi, спасибо
onewho вне форума Ответить с цитированием
Старый 11.12.2011, 13:34   #8
haruhi
Форумчанин
 
Аватар для haruhi
 
Регистрация: 05.10.2011
Сообщений: 368
По умолчанию

хорошая статья про генераторы случайных чисел
Не стоит будить спящего Бога! (с) Меланхолия Харухи Судзумии
haruhi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вводится натуральное трехзначное число. Определить, есть ли среди цифр этого числа одинаковые (задание по Паскалю) najdjel Помощь студентам 0 11.10.2011 17:59
Выявить одинаковые числа в таблице и удалить их falcon-2005 Microsoft Office Excel 4 30.05.2011 14:59
даны натуральные трехзначные числа, нужно выбрать такие, запись которых содержит два одинаковые цифры. TuuuZ Помощь студентам 2 28.12.2009 16:18
Есть ли одинаковые числа! kloyn91 Microsoft Office Excel 3 29.10.2009 14:07
Одинаковые числа artemavd Общие вопросы Delphi 10 14.11.2008 20:36