I am trying to let children to process different random value EVERYTIME. If there is 3 children, I want them to generate 3 different random value each, so in total 3*3=9 different number. I've tried many srand(), if I go srand(time(NULL)) , all the children produces three same random number(123, 123, 123), and if I put getpid() into srand(), each child produces a random number three times(111,222,333). But I can't find something that produces 9 different random values. Here are my codes.
int main(int argc, char const *argv[]){
int pid[6];
for (int i = 0; i < 3; i ) {
pid[i] = fork();
if (pid < 0) {
printf("Fork Failed\n");
exit(0);
}
if (pid[i] == 0) {
time_t t;
srand((int)time(&t) % getpid());
int r = rand() % 30;
int count = 0;
while (count < 3){
printf("Child %d: %d\n",i 1,r);
count ;
}
exit(0);
}
}
return 0;
}
CodePudding user response:
You only call rand() once in each child (outside the while (count < 3) loop, and then you print out that same number three times in a loop. Note that you do not assign any new value to r between loop iterations, so naturally its value hasn't changed when you print it again.
If you want three different numbers, call rand() three times (inside the loop). Replace
int r = rand() % 30;
int count = 0;
while (count < 3){
printf("Child %d: %d\n",i 1,r);
count ;
}
with
int count = 0;
while (count < 3){
int r = rand() % 30;
printf("Child %d: %d\n",i 1,r);
count ;
}
