Случайное число между разветвленными процессами одинаково
Я разветвляю несколько процессов из процесса менеджера. Затем я хотел бы сделать случайный номер порта для этих разветвленных процессов для прослушивания. Однако, когда я получаю случайное число и получаю случайное число, я получаю одинаковое число между тремя процессами. Например:
менеджер:
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)
если вы хотите еще меньше предсказуемости.