/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