Чтение / dev / urandom поточно-ориентировано? - PullRequest
8 голосов
/ 25 сентября 2008

Это код:

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

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

1 Ответ

11 голосов
/ 25 сентября 2008

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

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

...