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