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