Domanda

Questo è il codice:

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

In caso contrario, come posso renderlo thread-safe?

È stato utile?

Soluzione

Finché ogni esecuzione della funzione è nel proprio thread (ovvero, le variabili locali numero , urandom , bytes_read non sono condiviso tra thread), non vedo alcun problema di sicurezza dei thread. Ogni thread avrà quindi il proprio descrittore di file in / dev / urandom . / dev / urandom può essere aperto contemporaneamente da più processi, quindi va bene.

A proposito, / dev / urandom potrebbe non riuscire ad aprirsi e il tuo codice dovrebbe occuparsene. Alcune cause sono: esaurimento dei descrittori di file disponibili; / dev non montato correttamente (anche se in questo caso hai problemi più grandi); il tuo programma viene eseguito in uno speciale chroot che nega l'accesso a qualsiasi dispositivo; ecc.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top