2

我正在从管理器进程中分叉多个进程。然后我想为这些分叉的进程创建一个随机端口号来监听。但是,当我随机播种并获得一个随机数时,我会在三个进程之间获得相同的数字。例如:

经理:

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
    }
  }
}

路由器:

int main(){
  randomPort(); 
}
void randomPort(){
    srand(time(NULL));
    int host_port = rand() % 99999 + 11111;
    cout << houst_port << endl;
}

我曾尝试在经理处播种,然后在该过程中尝试 rand,但是当我可以 rand 时,我仍然遇到相同的问题。除了时间之外,我可以用任何东西播种,并且仍然可以获得良好的随机结果。

4

2 回答 2

1

Seed with (pid % RAND_MAX) ^ WHATEVER-- 这将保证每个进程都有不同的种子。

您可以定义WHATEVER为特定值,或者(time(NULL) % RAND_MAX)如果您想要更少的可预测性。

于 2012-11-18T02:59:17.317 回答
1

由于每个进程的时间都相同,因此您需要另一个保证在进程之间不同的输入。进程号适用于此。通过将进程号添加到时间来将两者结合起来。

于 2012-11-18T03:11:01.527 回答