我正在从管理器进程中分叉多个进程。然后我想为这些分叉进程创建一个随机端口号来侦听。但是,当我随机播种并获得随机数时,我在三个进程之间获得相同的数字。例如:
manager:
int main(){
for(int i = 0; i < rCount; i++){
pid_t pid = fork();
if (pid == 0) {// child
execl(ROUTERLOCATION,"",NULL); //create router process
}
else { // parent
}
}
}
router:
int main(){
randomPort();
}
void randomPort(){
srand(time(NULL));
int host_port = rand() % 99999 + 11111;
cout << houst_port << endl;
}
我已经尝试在经理处播种,然后在该过程中尝试兰特,但我仍然遇到同样的问题,即当我可以兰特时获得相同的数字。我可以用除时间之外的任何东西作为种子,并且仍然获得良好的随机结果吗?
由于每个进程的时间都是相同的,因此您需要另一个保证在进程之间不同的输入。进程号对此很有效。通过将进程号添加到时间来将两者结合起来。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)