Est-ce que lire / dev / urandom thread-safe?
-
02-07-2019 - |
Question
Ceci est le code:
unsigned int number;
FILE* urandom = fopen("/dev/urandom", "r");
if (urandom) {
size_t bytes_read = fread(&number, 1, sizeof(number), urandom);
DCHECK(bytes_read == sizeof(number));
fclose(urandom);
} else {
NOTREACHED();
}
Si non, comment puis-je le rendre thread-safe?
La solution
Tant que chaque exécution de la fonction est dans son propre thread (c'est-à-dire, les variables locales numéro
, urandom
, octets_read
ne sont pas partagé entre les threads), je ne vois aucun problème de sécurité des threads. Chaque thread aura alors son propre descripteur de fichier dans / dev / urandom
. / dev / urandom
peut être ouvert simultanément à partir de plusieurs processus, ce n'est pas grave.
Au fait, / dev / urandom
peut ne pas s'ouvrir et votre code doit le gérer. Certaines causes sont les suivantes: manque de descripteurs de fichiers disponibles; / dev
n'est pas correctement monté (bien que dans ce cas, vous ayez de gros problèmes); votre programme est exécuté dans un chroot
spécial qui interdit l'accès à tout périphérique; etc.