读/ dev / urandom线程安全吗?
-
02-07-2019 - |
题
这是代码:
<代码> 代码>
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
中运行,它拒绝访问任何设备;等
不隶属于 StackOverflow