質問

これはコードです:

  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 あらゆるデバイスへのアクセスを拒否します。等

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top