2014-11-03 2 views
0

Итак, мне было любопытно, как кто-то мог получить случайные значения в нескольких потоках с помощью команды rand_r. Если я использовал время (NULL) для семени, все заканчиваются семенем семени, потому что потоки создаются так близко друг к другу. Все действия основаны на этом случайном семени, поэтому все потоки остаются идентичными для остальной части моей программы. Как получить [USING RAND_R (* int seed)] случайное число, которое различалось по всем потокам?C89: Многопоточные случайные значения с помощью rand_r()

Заранее спасибо.

+0

Вы можете вызвать 'time (NULL)', чтобы получить первое семя и второе семя. Затем вы можете использовать второе семя для генерации третьего семени. И так далее. –

+0

Как насчет использования семени = время (NULL) + thread_id? Или XOR их. – user515430

ответ

0

Вы можете использовать arc4random для генерации начальных значений для каждой нити.

1

man page для rand_r на Ubuntu Linux 14.04 предлагает:

значение, на которое указывает seedp аргумент rand_r() обеспечивает только очень небольшое количество состояния, так что эта функция будет слабым псевдослучайной генератор. Вместо этого попробуйте drand48_r(3).

+3

Как это ответить на вопрос? Не говоря уже о том, что это верно только для Ubuntu, на странице руководства может быть указано что-то другое на другой платформе. –

+0

Спасибо за ответ. Мое задание просит меня найти случайное число для моего времени сна, но он настаивает, что я использую rand_r ... Я видел это, но пытался найти ответ в рамках рекомендаций. – guitar80

+0

Единственное предложение, которое я должен использовать глобальную переменную для и только заполнить его в начале программы, то есть не до каждого вызова rand_r(). – TonyB