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

只要函数的每次执行都在自己的线程中(即,局部变量number, urandom,bytes_read不在线程之间共享),我看不到任何线程安全问题。然后每个线程都有自己的文件描述符到/dev/urandom. /dev/urandom可以从多个进程同时打开,所以没关系。

顺便说一句,/dev/urandom可能无法打开,您的代码应该处理它。一些原因是:可用的文件描述符用完;/dev没有正确安装(尽管在这种情况下你有更大的问题);您的程序正在以chroot拒绝访问任何设备的特殊方式运行;等等

于 2008-09-25T14:10:11.577 回答