I am trying to learn how to use rand_r, and after reading this question I am still a little confused, can someone please take a look and point out what I'm missing? To my understanding, rand_r takes a pointer to some value (or a piece of memory with some initial value) and use it to generate new numbers every time it is called. Each thread that calls rand_r should supply it with a unique pointer (or piece of memory) to get "actual random" numbers between different threads. That's why this:
int globalSeed;
//thread 1
rand_r(&globalSeed);
//thread 2
rand_r(&globalSeed);
is the wrong way of using it. If I have
int seed1,seed2;
//thread 1
rand_r(&seed1);
//thread 2
rand_r(&seed2);
this would be the right way to generate "true random" numbers between threads?
EDIT: additional questions after reading answers to the above part:
- if in thread 1 I need a random
number between 1 to n, should I do
(rand_r(&seed1) % (n-1)) + 1? Or there is other common way of doing this? - Is it right or normal if the memory for the seed is dynamically allocated?