读/ 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(); }
如果没有,我如何使其线程安全?
只要函数的每次执行都在自己的线程中(即,局部变量number
, urandom
, bytes_read
不在线程之间共享),我就看不到任何线程安全问题。 然后每个线程都有自己的文件描述符到/dev/urandom
。 /dev/urandom
可以从多个进程同时打开,所以没关系。
顺便说一下, /dev/urandom
可能无法打开,你的代码应该处理它。 一些原因是:用完了可用的文件描述符; /dev
没有正确安装(虽然在这种情况下你有更大的问题); 你的程序是在一个特殊的chroot
运行的,它拒绝访问任何设备; 等等