Я пытаюсь научиться использовать rand_r, и после прочтения этого вопроса я все еще немного смущен, может кто-то, пожалуйста, взгляните и укажите, что я Не хватает? Насколько я понимаю, rand_r принимает указатель на некоторое значение (или часть памяти с некоторым начальным значением) и использует его для генерации новых чисел каждый раз, когда он вызывается. Каждый поток, который вызывает rand_r, должен снабжать его уникальным указателем (или частью памяти) для получения "фактических случайных" чисел между разными потоками. Вот почему это:
int globalSeed;
//thread 1
rand_r(&globalSeed);
//thread 2
rand_r(&globalSeed);
- неправильный способ его использования. Если у меня есть
int seed1,seed2;
//thread 1
rand_r(&seed1);
//thread 2
rand_r(&seed2);
это был бы правильный способ генерации "истинных случайных" чисел между потоками?
EDIT: дополнительные вопросы после чтения ответов на вышеуказанную часть:
- если в потоке 1 мне нужен случайный
число от 1 до n, следует ли мне делать
(rand_r(&seed1) % (n-1)) + 1
? Или есть другой общий способ сделать это? - Правильно ли или нормально, если память для семени динамически распределена?