Il thread di lettura / dev / urandom è sicuro?
-
02-07-2019 - |
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?
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.