这是代码:
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
拒绝访问任何设备; ETC。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)