这是代码:

<代码>

  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