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

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

менеджер:

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

Решение

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

1

Другие решения

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

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

1

По вопросам рекламы [email protected]