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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top