Случайное число между разветвленными процессами одинаково

Я разветвляю несколько процессов из процесса менеджера. Затем я хотел бы сделать случайный номер порта для этих разветвленных процессов для прослушивания. Однако, когда я получаю случайное число и получаю случайное число, я получаю одинаковое число между тремя процессами. Например:

менеджер:

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

Я пробовал посеять у менеджера, а затем пробовать ранд в процессе, но у меня все та же проблема получения того же числа, когда я могу рандировать. Могу ли я посеять что-нибудь, кроме времени, и все же получить хорошие случайные результаты.

2 ответа

Решение

Поскольку время будет одинаковым для каждого процесса, вам потребуется другой вход, который гарантированно будет отличаться между процессами. Номер процесса хорошо подходит для этого. Объедините их, добавив номер процесса к времени.

Семя с (pid % RAND_MAX) ^ WHATEVER - это гарантирует разные семена для каждого процесса.

Вы можете определить WHATEVER к определенному значению, или (time(NULL) % RAND_MAX) если вы хотите еще меньше предсказуемости.

Другие вопросы по тегам