分叉进程之间的随机数是相同的

时间:2012-11-18 02:51:01

标签: c++ random fork srand

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

管理器:

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,但是我仍然有同样的问题,在我可以得到相同的数字。除了时间之外,我可以播种任何东西,并且仍能获得良好的随机结果。

2 个答案:

答案 0 :(得分:1)

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

您可以将WHATEVER定义为特定值,如果您希望更低的可预测性,则可以(time(NULL) % RAND_MAX)

答案 1 :(得分:1)

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