10

これはコードです:

  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();
  }

そうでない場合、スレッドセーフにするにはどうすればよいですか?

4

1 に答える 1

12

関数の各実行が独自のスレッドで行われる限り (つまり、ローカル変数numberurandombytes_readがスレッド間で共有されない場合)、スレッド セーフの問題は見られません。各スレッドは、独自のファイル記述子を に持ちます/dev/urandom/dev/urandom複数のプロセスから同時に開くことができるので大丈夫です。

ところで、/dev/urandom開くのに失敗する可能性があり、コードで対処する必要があります。いくつかの原因は次のとおりです。使用可能なファイル記述子が不足している。/dev適切にマウントされていません (ただし、この場合はより大きな問題があります)。プログラムはchroot、デバイスへのアクセスを拒否する特別な状態で実行されています。等

于 2008-09-25T14:10:11.577 に答える