C:多个child进程各自产生不同的随机数
C: multiple child process each generate different random number
我试图让 children 每次都处理不同的随机值。如果有 3 children,我希望他们每个生成 3 个不同的随机值,所以总共 3*3=9 个不同的数字。我已经尝试了很多srand()
,如果我去srand(time(NULL))
,所有children都会产生三个相同的随机数(123, 123, 123)
,如果我把getpid()
放入srand()
,每次child三次产生一个随机数(111,222,333)
。但我找不到能产生 9 种不同随机值的东西。这是我的代码。
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;
}
你只在每个 child 中调用 rand()
一次(在 while (count < 3)
循环之外,然后你在一个循环中打印出相同的数字三次。注意你没有在循环迭代之间为 r
分配任何新值,因此当您再次打印时它的值自然不会改变。
如果您想要三个不同的号码,请调用 rand()
三次(在循环内)。替换
int r = rand() % 30;
int count = 0;
while (count < 3){
printf("Child %d: %d\n",i+1,r);
count++;
}
和
int count = 0;
while (count < 3){
int r = rand() % 30;
printf("Child %d: %d\n",i+1,r);
count++;
}
我试图让 children 每次都处理不同的随机值。如果有 3 children,我希望他们每个生成 3 个不同的随机值,所以总共 3*3=9 个不同的数字。我已经尝试了很多srand()
,如果我去srand(time(NULL))
,所有children都会产生三个相同的随机数(123, 123, 123)
,如果我把getpid()
放入srand()
,每次child三次产生一个随机数(111,222,333)
。但我找不到能产生 9 种不同随机值的东西。这是我的代码。
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;
}
你只在每个 child 中调用 rand()
一次(在 while (count < 3)
循环之外,然后你在一个循环中打印出相同的数字三次。注意你没有在循环迭代之间为 r
分配任何新值,因此当您再次打印时它的值自然不会改变。
如果您想要三个不同的号码,请调用 rand()
三次(在循环内)。替换
int r = rand() % 30;
int count = 0;
while (count < 3){
printf("Child %d: %d\n",i+1,r);
count++;
}
和
int count = 0;
while (count < 3){
int r = rand() % 30;
printf("Child %d: %d\n",i+1,r);
count++;
}