这是代码:
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
,拒绝访问任何设备; 等等