Pergunta

Este é o código:

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

Se não, como posso torná-lo seguro para threads?

Foi útil?

Solução

Contanto que cada execução da função esteja em seu próprio thread (ou seja, as variáveis ​​locais number, urandom, bytes_read não são compartilhados entre threads), não vejo nenhum problema de segurança de thread.Cada thread terá então seu próprio descritor de arquivo em /dev/urandom. /dev/urandom pode ser aberto simultaneamente a partir de vários processos, então tudo bem.

Por falar nisso, /dev/urandom pode falhar ao abrir e seu código deve lidar com isso.Algumas causas são:ficar sem descritores de arquivo disponíveis; /dev não montado corretamente (embora neste caso você tenha problemas maiores);seu programa está sendo executado em um especial chroot que nega acesso a quaisquer dispositivos;etc.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top