Я разветвляю несколько процессов из процесса менеджера. Затем я хотел бы сделать случайный номер порта для этих разветвленных процессов для прослушивания. Однако, когда я получаю случайное число и получаю случайное число, я получаю одинаковое число между тремя процессами. Например:
менеджер:
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;
}
Я пробовал посеять у менеджера, а затем пробовать ранд в процессе, но у меня все та же проблема получения того же числа, когда я могу рандировать. Могу ли я посеять что-нибудь кроме времени и все же получить хорошие случайные результаты.
Поскольку время будет одинаковым для каждого процесса, вам потребуется другой вход, который гарантированно будет отличаться между процессами. Номер процесса хорошо подходит для этого. Объедините их, добавив номер процесса к времени.
Семя с (pid % RAND_MAX) ^ WHATEVER
— это гарантирует разные семена для каждого процесса.
Вы можете определить WHATEVER
к определенному значению, или (time(NULL) % RAND_MAX)
если вы хотите еще меньше предсказуемости.