读/ dev / urandom线程安全吗?

这是代码:

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

如果没有,我如何使其线程安全?

只要函数的每次执行都在自己的线程中(即,局部变量numberurandombytes_read不在线程之间共享),我就看不到任何线程安全问题。 然后每个线程都有自己的文件描述符到/dev/urandom/dev/urandom可以从多个进程同时打开,所以没关系。

顺便说一下, /dev/urandom可能无法打开,你的代码应该处理它。 一些原因是:用完了可用的文件描述符; /dev没有正确安装(虽然在这种情况下你有更大的问题); 你的程序是在一个特殊的chroot运行的,它拒绝访问任何设备; 等等