Вопрос

Это и есть код:

  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();
  }

Если нет, то как мне сделать его потокобезопасным?

Это было полезно?

Решение

До тех пор, пока каждое выполнение функции выполняется в своем собственном потоке (т.е. в локальных переменных number, urandom, bytes_read не разделяются между потоками), я не вижу никаких проблем с безопасностью потоков.Затем каждый поток будет иметь свой собственный файловый дескриптор в /dev/urandom. /dev/urandom может быть открыт одновременно из нескольких процессов, так что ничего страшного.

Кстати, /dev/urandom может произойти сбой при открытии, и ваш код должен справиться с этим.Вот некоторые причины:заканчиваются доступные файловые дескрипторы; /dev неправильно смонтирован (хотя в этом случае у вас возникают более серьезные проблемы);ваша программа запускается в специальном chroot который запрещает доступ к любым устройствам;и т.д.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top