Suppose I have a function generateId to generate random 64-bit integers. If I write generateId like this
uint64_t generateId() {
static thread_local std::mt19937_64 rng{std::random_device{}()};
return rng();
}
Then rng won't get reseeded after a fork. Running
int main() {
std::cout << generateId() << "\n";
if (fork() == 0) {
std::cout << "child: " << generateId() << "\n";
} else {
std::cout << "parent: " << generateId() << "\n";
}
return 0;
}
Will print the same number for child and parent.
Is there a way I can write generateId so that it reseeds for new processes but still remains performant.
Aucun commentaire:
Enregistrer un commentaire